如何使scalatra编译任务依赖于scala。sbt中的js packageJS任务?
题
我有一个scalatra项目,我想在其中提供从scala生成的JavaScript。js项目。
我有一个多项目sbt构建,允许我成功构建这两个项目。也就是说,我可以使用scalatra项目中的编译(和运行)任务;我可以在scala中使用packageJS任务。js项目。
但是,我非常希望能够让scalatra编译任务依赖于scala。js packageJS任务;因此,当Scalatra项目编译时,Javascript会在Scala中自动生成。js项目。
在我的多项目构建中。我试过的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!)-任何人都可以启发我如何做到这一点?
谢谢:)
解决方案
你在这里想要的不是之间的依赖关系 工程项目 (这是什么 dependsOn
在一个项目上确实如此),但在两者之间 tasks
.
我不熟悉Scalatra,但对于sbt方面,它应该与Play非常相似,我们有一个使用Scala的Play项目的成功模板。js这里: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
对于完全优化的版本(但每次进行更改时都需要几秒钟才能重建)。
不隶属于 StackOverflow