Created
July 9, 2018 14:48
-
-
Save elyphas/f16e174f5249547f2218291ede32c3d2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sbt.Keys._ | |
import sbt.Project.projectToRef | |
// a special crossProject for configuring a JS/JVM/shared structure | |
lazy val shared = (crossProject.crossType(CrossType.Pure) in file("shared")) | |
.settings( | |
scalaVersion := Settings.versions.scala, | |
libraryDependencies ++= Settings.sharedDependencies.value | |
) | |
// set up settings specific to the JS project | |
.jsConfigure(_ enablePlugins ScalaJSWeb) | |
lazy val sharedJVM = shared.jvm.settings(name := "sharedJVM") | |
lazy val sharedJS = shared.js.settings(name := "sharedJS") | |
// use eliding to drop some debug code in the production build | |
lazy val elideOptions = settingKey[Seq[String]]("Set limit for elidable functions") | |
// instantiate the JS project for SBT with some additional settings | |
lazy val client: Project = (project in file("client")) | |
.settings( | |
name := "client", | |
version := Settings.version, | |
scalaVersion := Settings.versions.scala, | |
scalacOptions ++= Settings.scalacOptions, | |
libraryDependencies ++= Settings.scalajsDependencies.value, | |
addCompilerPlugin("org.scalamacros" %% "paradise" % "2.1.0" cross CrossVersion.patch), | |
// by default we do development build, no eliding | |
elideOptions := Seq(), | |
scalacOptions ++= elideOptions.value, | |
jsDependencies ++= Settings.jsDependencies.value, | |
// RuntimeDOM is needed for tests | |
jsDependencies += RuntimeDOM % "test", | |
// yes, we want to package JS dependencies | |
skip in packageJSDependencies := false, | |
// use Scala.js provided launcher code to start the client app | |
scalaJSUseMainModuleInitializer := true, | |
scalaJSUseMainModuleInitializer in Test := false, | |
skip in packageJSDependencies := false, | |
/*npmDependencies in Compile += "react" -> "16.2.0", | |
npmDependencies in Compile += "react-dom" -> "16.2.0",*/ | |
/*npmDependencies in Compile ++= Seq( | |
"react" -> "16.2.0", | |
"react-dom" -> "16.2.0"),*/ | |
//npmDependencies in Compile += "react-apollo" -> "1.4.8" | |
// use uTest framework for tests | |
testFrameworks += new TestFramework("utest.runner.Framework") | |
) | |
.enablePlugins(ScalaJSPlugin, ScalaJSWeb, SbtWeb/*, ScalaJSBundlerPlugin, JSDependenciesPlugin*/) | |
.dependsOn(sharedJS) | |
/*includeFilter in (Assets, LessKeys.less) := "*.less" | |
excludeFilter in (Assets, LessKeys.less) := "_*.less"*/ | |
// Client projects (just one in this case) | |
lazy val clients = Seq(client) | |
/**/ | |
// instantiate the JVM project for SBT with some additional settings | |
lazy val server = (project in file("server")) | |
.settings( | |
name := "server", | |
version := Settings.version, | |
scalaVersion := Settings.versions.scala, | |
scalacOptions ++= Settings.scalacOptions, | |
libraryDependencies ++= Settings.jvmDependencies.value :+ guice :+ ws, | |
commands += ReleaseCmd, | |
// triggers scalaJSPipeline when using compile or continuous compilation | |
compile in Compile := ((compile in Compile) dependsOn scalaJSPipeline).value, | |
// connect to the client project | |
scalaJSProjects := clients, | |
pipelineStages in Assets := Seq(scalaJSPipeline), | |
pipelineStages := Seq(digest, gzip), | |
// compress CSS | |
LessKeys.compress in Assets := true | |
//, | |
//javaOptions in run += "-Xms256M -Xmx2G" //-XX:MaxPermSize=1024M | |
) | |
.enablePlugins(PlayScala) | |
.disablePlugins(PlayLayoutPlugin) // use the standard directory layout instead of Play's custom | |
.aggregate(clients.map(projectToRef): _*) | |
.dependsOn(sharedJVM) | |
// Command for building a release | |
lazy val ReleaseCmd = Command.command("release") { | |
state => "set elideOptions in client := Seq(\"-Xelide-below\", \"WARNING\")" :: | |
"client/clean" :: | |
"client/test" :: | |
"server/clean" :: | |
"server/test" :: | |
"server/dist" :: | |
"set elideOptions in client := Seq()" :: | |
state | |
} | |
//scalaJSUseMainModuleInitializer := true | |
//mainClass in Compile := Some(SPAMain) | |
// lazy val root = (project in file(".")).aggregate(client, server) | |
// loads the Play server project at sbt startup | |
//onLoad in Global := (Command.process("project server", _: State)) compose (onLoad in Global).value | |
//onLoad in Global := (scala.sys.process("project server", _: State)) compose (onLoad in Global).value | |
onLoad in Global ~= (_ andThen ("project server" :: _)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment