为Scala.js提供服务的资产

7
我开始了一个新项目,使用FinchScala.js,后端和前端需要共享一些代码。
我关心的是一个良好的方式来服务于由Finch生成的JS。目前,我正在使用自定义的SBT任务,将文件从js/target/scala-2.11/*.js复制到jvm/src/main/resources。但我想知道是否有更好的方法。
我看到了一个很棒的SPA教程,它使用sbt-play-scalajs插件,但它似乎只适用于Play。
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这样的工具,它们也将被打包到您的fat jar中。


3
这里有一个完整的构建示例,它处理其他事情,例如使用sbt revolver实现服务器的实时重新加载和统一fastOptJS/fullOptJS - OlivierBlanvillain
嘿,谢谢!看起来那就是我要找的。 - chuwy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接