提供 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 中
我用 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
.