Scala.js - 从 SBT 运行 传递命令行参数

Scala.js - pass command line arguments from SBT run

当 运行 应用程序使用 sbt run 开发普通 JVM 应用程序时,我可以使用 run <args> 传递命令行参数。当我尝试对 Scala.js 进行相同操作时,出现错误 "No valid parser available"。当尝试 runMain 变体如 runMain Main.main arg 时,错误是 "Expected non-whitespace character",箭头指向 Main.main.

后面

当 运行 来自 SBT 时,有什么方法可以将参数传递给 Scala.js / Node.js 应用程序?

(我正在使用 Scala.js 0.6.15)。

不,没有,因为 JavaScript 没有命令行参数的概念。 Node.js 可以,但前提是从命令行启动,恐怕 sbt 插件不支持该用例。

随时提交功能请求。我不确定它是否可以容纳,但我们最终会调查它。

可以定义自定义任务调用 node.js,并使用 SBT 解析器解析参数。将其添加到 build.sbt:

import complete.DefaultParsers._

lazy val runa = inputKey[Unit]("Run app with arguments")

runa := {
  (fastOptJS in Compile).value // build it first
  val args: Seq[String] = spaceDelimited("<arg>").parsed
  val npmRun = "node index.js" + args.map("\"" + _ + "\"").mkString(" "," ","")
  npmRun.!
}

您还需要在项目根目录中创建一个文件 index.js,其中包含如下内容:

require("./target/scala-2.12/xxxx-jsdeps.js");

require("./target/scala-2.12/xxxx-fastopt.js");