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");
当 运行 应用程序使用 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");