我有一个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 对于完全优化的版本(但每次进行更改时都需要几秒钟才能重建)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top