事实上,工具 API 在 0.6.5 中发生了巨大的变化。它变得更加简单,并且能够在未来以不间断的方式发展。
您可以使用新的 API 编写上面的代码,如下所示:
import java.io.File
import org.scalajs.core.tools.io._
import org.scalajs.core.tools.sem._
import org.scalajs.core.tools.linker.backend.{OutputMode, ModuleKind}
import org.scalajs.core.tools.linker.Linker
import org.scalajs.core.tools.logging.ScalaConsoleLogger
def link(inputClasspath: Seq[File], outputJSFile: File): Unit = {
// Obtain VirtualScalaJSIRFile's from the input classpath
val irCache = new IRFileCache().newCache
val irContainers = IRFileCache.IRContainer.fromClasspath(inputClasspath)
val sjsirFiles = irCache.cached(irContainers)
// A bunch of options. Here we use all the defaults
val semantics = Semantics.Defaults
val outputMode = OutputMode.Default
val moduleKind = ModuleKind.NoModule
val linkerConfig = Linker.Config()
// Actual linking
val linker = Linker(semantics, outputMode, moduleKind, linkerConfig)
val logger = new ScalaConsoleLogger
linker.link(sjsirFiles, WritableFileVirtualJSFile(outputJSFile), logger)
}
你可以称之为link
具有以下参数的函数,以与上面的代码片段完全匹配:
link(Seq(scalajsLib, src), new java.io.File(target, JS_FILE))
如果您打算在同一进程内的同一类路径上多次调用此方法,建议缓存并重用实例irCache
and linker
跨运行,因为这将大大加快该过程。
也可以看看工具 API 的 Scaladoc https://www.scala-js.org/api/scalajs-tools/latest/#org.scalajs.core.tools.package.