【问题标题】:Scala.js crossProject vs manual setupScala.js crossProject 与手动设置
【发布时间】:2023-04-05 18:03:01
【问题描述】:

要使用 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 是做一些重要的事情还是只是更方便的设置方式?

【问题讨论】:

标签: scala sbt scala.js


【解决方案1】:

看起来,在您的手动设置中,您的“共享”区域下有单独的 jvm 和 js 子目录——看起来它们根本不是相同的代码。

CrossProject 是关于让您拥有一个具有相同代码的单一目录结构,该目录结构为双方编译。可能有一些特定于一侧或另一侧的小子目录,但总的来说,重点是大部分代码是共享的——jvm 和 js 子目录,如果存在(取决于模式),通常只是填充使通用代码适应这些方面。

说了这么多, 真的只是为了让它更方便——我相信没有 CrossProject 也能达到同样的效果。但是在您共享大量代码的常见情况下,它会更加方便...

【讨论】:

  • > 看起来,在您的手动设置中,您的“共享”区域下有单独的 jvm 和 js 子目录
猜你喜欢
  • 2018-07-27
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多