要使用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
做一些重要事情还是设置内容的更方便的方式?
答案 0 :(得分:0)
看起来,在您的手动设置中,分开 jvm和js子目录位于" shared"区域 - 它们看起来根本不是相同的代码。
CrossProject是关于让你拥有单个目录结构,其中相同的代码是为两个方面编译的。可能有一些特定于一侧或另一侧的小子目录,但一般来说重点是大多数代码是共享的 - 如果存在jvm和js子目录(它取决于模式),通常只是填充使公共代码适应这些方面。
所有这一切, 真的只是为了让它更方便 - 我相信如果没有CrossProject,你可以获得相同的结果。但是在您共享大量代码的常见情况下,它会更方便...