【问题标题】: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");
      

      【讨论】:

        猜你喜欢
        • 2016-10-25
        • 2011-12-18
        • 1970-01-01
        • 2016-03-25
        • 1970-01-01
        • 2021-01-21
        • 1970-01-01
        • 2011-12-13
        • 2018-03-28
        相关资源
        最近更新 更多