提供Scala.js资产

时间:2016-06-04 17:45:16

标签: scala sbt asset-pipeline scala.js finch

我使用FinchScala.js启动了新项目,其中后端和前端需要共享一些代码。

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

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

1 个答案:

答案 0 :(得分:5)

我成功使用的一种方法涉及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之类的内容,也可以将其打包到您的胖罐中。