我有一个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 compile”。
我对sbt(以及Scalatra和Scala.js)相当新鲜 - 有人可以告诉我如何做到这一点吗?
谢谢:)
答案 0 :(得分:3)
这里你想要的不是项目(项目的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
(但每次进行更改时都需要几秒钟才能重建)。