【问题标题】:ScalaJs PhantomJsEnv doesn't work when phantomjs is installed from npm从 npm 安装 phantomjs 时,ScalaJs PhantomJsEnv 不起作用
【发布时间】:2015-04-21 07:18:33
【问题描述】:

我正在尝试使用通过 npm 安装的 phantomjs 来执行我的 ScalaJS 单元测试。

当我运行测试时,我收到以下错误:

/usr/bin/env: node: No such file or directory

我相信这是因为 phatomjs 在与 npm 一起安装时如何加载节点:

这是 phantomjs 的第一行:

#!/usr/bin/env node

如果我将第一行更改为对节点可执行文件进行硬编码(这涉及修改 npm 安装的文件,因此它充其量只是一个临时解决方案):

#!/home/bjackman/cgta/opt/node/default/bin/node

一切正常。

顺便说一句,我正在使用 phantom.js,因为 moment.js 在 NodeJSEnv 中不起作用。

解决方法:

查看插件源后,解决方法如下:

我正在将环境从 sbt 转发到 PhantomJSEnv:

import scala.scalajs.sbtplugin.ScalaJSPlugin._
import scala.scalajs.sbtplugin.env.nodejs.NodeJSEnv
import scala.scalajs.sbtplugin.env.phantomjs.PhantomJSEnv
import scala.collection.JavaConverters._
val env = System.getenv().asScala.toList.map{case (k,v)=>s"$k=$v"}

olibCross.sjs.settings(
  ScalaJSKeys.requiresDOM := true,
  libraryDependencies += "org.webjars" % "momentjs" % "2.7.0",
  ScalaJSKeys.jsDependencies += "org.webjars" % "momentjs" % "2.7.0" / "moment.js",
  ScalaJSKeys.postLinkJSEnv := {
    if (ScalaJSKeys.requiresDOM.value) new PhantomJSEnv(None, env)
    else new NodeJSEnv
  }
)

有了这个,我可以在我的单元测试中使用 moment.js。

【问题讨论】:

  • 顺便说一句:jsDependencies 自动将 Module 添加到 libraryDependencies,所以不需要重复两次。
  • 看起来更像是一个错误报告而不是一个问题。你介意在 GitHub 上提交这个(和解决方法)吗? github.com/scala-js/scala-js/issues 谢谢。

标签: sbt scala.js


【解决方案1】:

更新:Scala.js (#865) 中的相关错误已得到修复。这应该可以在没有解决方法的情况下工作。

这确实是 Scala.js 中的一个错误(问题 #865)。备查;如果您想修改 jsEnv 的环境,您有两个选择(这同样适用于 Node.js 和 PhantomJS):

  1. 传入额外的环境变量作为参数(就像@KingCub的例子一样):

    new PhantomJSEnv(None, env)
    // env: Map[String, String]
    

    传入的值将优先于默认值。

  2. 覆盖getVMEnv:

     protected def getVMEnv(args: RunJSArgs): Map[String, String] =
       sys.env ++ additionalEnv // this is the default
    

    这将允许您:

    1. 读取/修改super.getVMEnv提供的环境
    2. 让您的环境依赖于runJS 方法的参数。

这同样适用于传递给可执行文件的参数。

【讨论】:

    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 2023-01-15
    • 2018-06-23
    • 2016-06-05
    • 2015-07-17
    • 1970-01-01
    相关资源
    最近更新 更多