我曾经成功地使用了一种方法,它涉及3个sbt项目和一个额外的文件夹用于静态内容:
.
├── build.sbt
├── client
├── server
├── shared
└── static
build.sbt
文件中,您应该使用以下内容:lazy val sharedSettings = Seq(
// File changes in `/static` should never trigger new compilation
watchSources := watchSources.value.filterNot(_.getPath.contains("static")))
lazy val server = project
.settings(sharedSettings: _*)
// Adds `/static` to the server resources
.settings(unmanagedResourceDirectories in Compile += baseDirectory.value / ".." / "static")
lazy val client = project
.enablePlugins(ScalaJSPlugin)
.settings(sharedSettings: _*)
// Changes Scala.js target folder to "/static/content/target"
.settings(Seq(fullOptJS, fastOptJS, packageJSDependencies, packageScalaJSLauncher, packageMinifiedJSDependencies)
.map(task => crossTarget in (Compile, task) := file("static/content/target")))
您的所有资产都可以作为标准资源访问,如果使用类似于sbt-assembly
这样的工具,它们也将被打包到您的fat jar中。
sbt revolver
实现服务器的实时重新加载和统一fastOptJS
/fullOptJS
。 - OlivierBlanvillain