2014-04-11 33 views
3

我有一個scalatra項目,我想在其中提供從scala.js項目生成的JavaScript。如何使scalatra編譯任務取決於sbt中的scala.js packageJS任務?

我有一個多項目sbt構建,允許我成功構建這兩個項目。 也就是說,我可以在scalatra項目中使用編譯(和運行)任務;我可以在scala.js項目中使用packageJS任務。但是,我非常希望能夠依靠scala.js packageJS任務來完成scalatra編譯任務;所以當Scalatra項目被編譯時,JavaScript會自動在Scala.js項目中生成。

在我的多項目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!)相當陌生 - 任何人都可以啓發我如何做到這一點?

謝謝:)

回答

3

是你想要的這裏沒有項目之間的依賴關係(這是什麼dependsOn一個項目做),但tasks之間。

我不熟悉Scalatra的,但對於SBT方面,它應該是極其相似的發揮,我們有遊戲項目成功的模板,Scala.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爲全面優化的版本(但需要幾秒鐘才能重建每次你做出改變的時間)。

+0

'preoptimizeJS'應改爲'fastOptJS'或'fullOptJS'。此外,還有兩個必需的導入:'import scala.scalajs.sbtplugin.ScalaJSPlugin._'和 'import scalaJSKeys._'。 –