【问题标题】:Serving Scala.js assets服务 Scala.js 资产
【发布时间】:2016-10-04 15:13:08
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • Here is 一个完整的构建示例,它处理其他内容,例如使用sbt revolver 实时重新加载服务器和统一fastOptJS/fullOptJS
    • 嘿,谢谢!看起来这就是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 2018-04-18
    • 1970-01-01
    • 2018-01-30
    • 2013-10-24
    相关资源
    最近更新 更多