【问题标题】:How to make scalatra compile task depend on scala.js packageJS task in sbt?如何使 scalatra 编译任务依赖于 sbt 中的 scala.js packageJS 任务?
【发布时间】:2014-04-11 21:38:19
【问题描述】:

我有一个 scalatra 项目,我想在其中提供从 scala.js 项目生成的 JavaScript。

我有一个多项目 sbt 构建,可以让我成功构建这两个项目。 也就是说,我可以使用scalatra项目中的编译(和运行)任务;我可以在 scala.js 项目中使用 packageJS 任务。

但是,我非常希望能够让 scalatra 编译任务依赖于 scala.js packageJS 任务;所以编译Scalatra项目时,会在Scala.js项目中自动生成Javascript。

在我尝试过的多项目 build.sbt 文件中:

lazy val wwwjs = project // Scala.js project

lazy val www = project // Scalatra project
  .dependsOn(wwwjs % "compile->packageJS")

但是在编译 Scalatra 项目时,失败并显示“在 wwwjs#wwwjs_2.10;0.1: 'packageJS' 中找不到配置。它是 www#www_2.10;0.1 编译所必需的”。

我对 sbt(以及 Scalatra 和 Scala.js!)相当陌生 - 谁能告诉我如何做到这一点?

谢谢:)

【问题讨论】:

    标签: sbt scalatra scala.js


    【解决方案1】:

    你想要的不是 projects 之间的依赖(这是 dependsOn 对项目所做的),而是 tasks 之间的依赖。

    我不熟悉 Scalatra,但对于 sbt 方面,它应该与 Play 非常相似,我们在这里有一个使用 Scala.js 的 Play 项目的成功模板: https://github.com/vmunier/play-with-scalajs-example/blob/master/project/Build.scala

    特别是,我从您上面的构建中得出以下基本改编:

    import scala.scalajs.sbtplugin.ScalaJSPlugin._ // if Build.scala
    import ScalaJSKeys._
    
    lazy val wwwjs = project // Scala.js project
    
    lazy val www = project // Scalatra project
      .settings(
        compile in Compile <<= (compile in Compile) dependsOn (fastOptJS in (wwwjs, Compile))
      )
    

    或者,使用 fullOptJS 而不是 fastOptJS 以获得完全优化的版本(但每次进行更改都需要几秒钟的时间来重建)。

    【讨论】:

    • preoptimizeJS 应更改为 fastOptJSfullOptJS。此外,还有两个必需的导入:import scala.scalajs.sbtplugin.ScalaJSPlugin._import ScalaJSKeys._
    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 2015-08-06
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2011-11-12
    • 2018-05-05
    • 2018-06-01
    相关资源
    最近更新 更多