Scala.js crossProject与手动设置

时间:2018-02-16 20:08:02

标签: scala sbt scala.js

要使用Scala.js和Scala JVM编译相同的源代码,documentation表示使用crossProject,例如

lazy val foo = crossProject.in(file(".")).
  settings(
    name := "foo",
    version := "0.1-SNAPSHOT"
  )

lazy val fooJVM = foo.jvm
lazy val fooJS = foo.js

然而,看起来可以实现手动设置模块的相同目标

lazy val fooSettings = Seq(
  name := "foo",
  version := "0.1-SNAPSHOT",
  scalaSource in Compile := baseDirectory.value / ".." / "shared" / "src" / "main" / "scala"
)

lazy val fooJVM = project.in(file("jvm"))
  .settings(fooSettings: _*)

lazy val fooJS = project.in(file("js"))
  .settings(fooSettings: _*)
  .enablePlugins(ScalaJSPlugin)

crossProject做一些重要事情还是设置内容的更方便的方式?

1 个答案:

答案 0 :(得分:0)

看起来,在您的手动设置中,分开 jvm和js子目录位于" shared"区域 - 它们看起来根本不是相同的代码。

CrossProject是关于让你拥有单个目录结构,其中相同的代码是为两个方面编译的。可能有一些特定于一侧或另一侧的小子目录,但一般来说重点是大多数代码是共享的 - 如果存在jvm和js子目录(它取决于模式),通常只是填充使公共代码适应这些方面。

所有这一切, 真的只是为了让它更方便 - 我相信如果没有CrossProject,你可以获得相同的结果。但是在您共享大量代码的常见情况下,它会更方便...