【问题标题】:Scala.js - pass command line arguments from SBT runScala.js - 从 SBT 运行传递命令行参数
【发布时间】:2017-08-17 08:22:30
【问题描述】:
在开发普通 JVM 应用程序时使用 sbt run 运行应用程序时,我可以使用 run <args> 传递命令行参数。当我对 Scala.js 进行相同尝试时,我收到错误“没有可用的有效解析器”。当尝试像runMain Main.main arg 这样的runMain 变体时,错误是“预期的非空白字符”,箭头指向 Main.main 后面。
从 SBT 运行 Scala.js / Node.js 应用程序时,有什么方法可以将参数传递给它吗?
(我使用的是 Scala.js 0.6.15)。
【问题讨论】:
标签:
node.js
scala
command-line
sbt
scala.js
【解决方案1】:
不,没有,因为 JavaScript 没有命令行参数的概念。 Node.js 可以,但前提是从命令行启动,并且恐怕 sbt 插件不支持该用例。
随时提出功能请求。我不确定它是否可以容纳,但我们最终会调查它。
【解决方案2】:
可以定义一个自定义任务调用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");