Sbt scalajsphantomjsenv不';从npm安装phantomjs时不工作
我试图使用通过npm安装的phantomjs来执行ScalaJ的单元测试 当我运行测试时,我得到以下错误:Sbt scalajsphantomjsenv不';从npm安装phantomjs时不工作,sbt,scala.js,Sbt,Scala.js,我试图使用通过npm安装的phantomjs来执行ScalaJ的单元测试 当我运行测试时,我得到以下错误: /usr/bin/env:node:没有这样的文件或目录 我相信这是因为phatomjs与npm一起安装时如何加载节点: 以下是phantomjs的第一行: #/usr/bin/env节点 如果我将第一行更改为节点可执行文件的硬代码(这涉及修改npm安装的文件,因此它充其量只是一个临时解决方案): #/主页/bjackman/cgta/opt/node/default/bin/node 一
/usr/bin/env:node:没有这样的文件或目录
我相信这是因为phatomjs与npm一起安装时如何加载节点:
以下是phantomjs的第一行:
#/usr/bin/env节点
如果我将第一行更改为节点可执行文件的硬代码(这涉及修改npm安装的文件,因此它充其量只是一个临时解决方案):
#/主页/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。更新:Scala.js()中的相关错误已经修复。这应该在没有解决办法的情况下起作用 这确实是Scala.js(问题)中的一个bug。供日后参考;如果要修改jsEnv的环境,有两个选项(这同样适用于Node.js和PhantomJS):
getVMEnv
:
protected def getVMEnv(args: RunJSArgs): Map[String, String] =
sys.env ++ additionalEnv // this is the default
这将允许您:
runJS
方法的参数这同样适用于传递给可执行文件的参数。除了注释外:
jsDependencies
自动将模块添加到libraryDependencies
,因此无需重复。看起来更像是一个bug报告,而不是一个问题。你介意把这个(和解决方法)归档到GitHub上吗?谢谢
protected def getVMEnv(args: RunJSArgs): Map[String, String] =
sys.env ++ additionalEnv // this is the default