提供 Scala.js 项资产

Serving Scala.js assets

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

而且我关心的是提供由 Finch fastOptJS 生成的 JS 的好方法。目前,我正在使用自定义 SBT 任务,该任务将文件从 js/target/scala-2.11/*.js 复制到 jvm/src/main/resources。但是我想知道有没有更好的方法呢

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

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