如何将现有的 Scala 库移植到 scalajs?

How do I port an existing Scala library to scalajs?

我是 Scala.js 的新手。我想使用 Argonaut json 库。

https://github.com/argonaut-io/argonaut

它唯一的依赖似乎是 Monocle 和 Scalaz 都有为 Scala.js 编译的版本。我很乐意将 Argonaut 移植到 Scala.js,但对如何开始还没有明确的想法。有人有什么指点吗?

谢谢。

快速概念验证

首先要尝试的是转换构建,以便 JVM 项目成为 Scala.js 项目。这个基础很简单:

project/plugins.sbt中添加对Scala.jssbt插件的依赖:

addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.2")

build.sbtproject/Build.scala 中(或类似的,取决于给定项目使用的内容),通过添加以下内容将项目变成 Scala.js 项目:

.enablePlugins(ScalaJSPlugin)

他们的定义。对于它们的依赖项,将 %% 依赖项替换为 %%% 依赖项以依赖于 Scala.js 工件。

至此,代码可以编译了,大概可以用来写例子或者直接用在你的应用中。复杂的构建可能需要更多的工作。

如果您的应用程序一切正常,那么您已经成功地验证了该库可以移植到 Scala.js。

更进一步:交叉编译构建

好的,现在您已经有了一个快速的概念证明,即该库可以编译并在 Scala.js 上工作,您将需要进行适当的 交叉编译 构建而不是快速分叉。事实上,现在构建不再生成 JVM 工件。

为此,您需要将所有需要交叉编译的项目重新转换为crossProject。为此,我推荐 cross-building documentation page 作为进一步文档的来源。