7

我用FinchScala.js开始了新项目,后端和前端需要共享一些代码。

而且我很关心为fastOptJSFinch 制作的 JS 提供服务的好方法。目前,我正在使用自定义 SBT 任务,它将文件js/target/scala-2.11/*.jsjvm/src/main/resources. 但我想知道是否有更好的方法来做到这一点。

我看到了很棒的SPA 教程,它使用了 sbt-play-scalajs 插件,但它似乎只适用于 Play。

4

1 回答 1

7

我成功使用的一种方法涉及 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.

于 2016-06-04T18:30:39.497 回答