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

14
我是一名新手,想要使用Argonaut json库,但对Scala.js不熟悉。

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

它似乎只依赖于Monocle和Scalaz,两者都有为Scala.js编译的版本。我很乐意将Argonaut移植到Scala.js,但不知道从何开始。有人能给我一些指点吗?
谢谢。
1个回答

26

快速概念验证

首先尝试的是将构建转换为JVM项目变成Scala.js项目。基础很简单:

project/plugins.sbt中,添加依赖于Scala.js sbt插件:

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。为此,我建议您参考交叉编译文档页面作为进一步文档的来源。


1
所以基本上你需要访问Scala项目才能将其移植到Scala.js,如果我错了,请纠正我?如果我可以访问此项目并将其移植到Scala.js项目,但它具有尚未移植到Scala.js的依赖项,该怎么办?请解释一下。 - iamsmkr
1
然后您需要传递地移植所有依赖项。 - sjrd
嗯,好吧。难道没有其他方法吗?例如,依赖于项目的源来使其成为scalajs项目(而不更改项目的配置)? - 6infinity8
当然,你可以在某种程度上依赖源代码。你需要重新管理传递性依赖关系,但这是可行的。 - sjrd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接