【发布时间】: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 谢谢。