scalajs:一个项目中的多个应用程序?

时间:2014-06-19 17:34:04

标签: scala sbt scala.js

如果我正确理解了scalajs文档,它只允许每个项目生成一个javascript。 有没有办法避免这种限制?

目前我为Play框架创建了scalajs子项目。在这个子项目中,我计划为我正在处理的服务创建所有scalajs应用程序。现在我发现了这个限制,它真的令人困惑和讨厌,因为我能想到的唯一两个解决方案是:

  1. 创建一个" mega-script"这对我来说是不可接受的
  2. 为每个scalajs app创建单独的子项目
  3. 对于一个大项目来说,它们都是不可接受的。

2 个答案:

答案 0 :(得分:5)

每个scalajs都在自己的子项目中并通过SBT管理所有内容MutliProject 这是一个有点复杂的游戏项目示例,它有6个以上的子项目可以编译成一个文件。 scala-js-binding 检查Build.scala

    lazy val preview = (project in file(".")).enablePlugins(PlayScala) settings(previewSettings: _*) dependsOn shared dependsOn bindingPlay aggregate frontend

  //aggregate scalaJs

  lazy val frontend = Project(
    id   = "frontend",
    base = file("frontend")   ) dependsOn shared dependsOn binding

...

      scalajsOutputDir     := baseDirectory.value / "public" / "javascripts" / "scalajs",

//fastOptJs - not optimized (3Mb)
      compile in Compile <<= (compile in Compile) dependsOn (fastOptJS in (frontend, Compile)),

//fullOptJS - fully optimized (330k)
      dist <<= dist dependsOn (fullOptJS in (frontend, Compile)),

答案 1 :(得分:3)

Scala.js确实旨在为每个项目生成一个JavaScript输出。实际上没有办法改变这一点。

但是,这不是Scala.js的限制。 Scala / Java本身的行为方式相同:您无法从单个sbt项目为Scala / Java应用程序生成两个.jars。所以我不明白为什么Scala.js应该有不同的行为。

根据@ user3430609的建议,在您的sbt版本中使用multiple projects