TypeError:jsdom.createVirtualConsole不是函数

时间:2017-05-24 01:50:12

标签: node.js scala npm scala.js

我正在尝试建立basic Scala.js tutorial,并且遇到了这个奇怪的错误。

与教程中显示的项目设置没有太大区别,但以防万一我的build.sbt:

enablePlugins(ScalaJSPlugin)

scalaVersion := "2.12.1"

name := "algorithms1_4_34"
version := "1.0"

libraryDependencies ++= Seq("org.scalatest" % "scalatest_2.12" % "3.0.1" % "test",
            "org.scalacheck" %% "scalacheck" % "1.13.4" % "test",
             "org.scala-js" % "scalajs-dom_sjs0.6_2.12" % "0.9.1",
             "be.doeraene" %%% "scalajs-jquery" % "0.9.1")

// This is an application with a main method
scalaJSUseMainModuleInitializer := true

skip in packageJSDependencies := false
jsDependencies +=
  "org.webjars" % "jquery" % "2.1.4" / "2.1.4/jquery.js"
jsDependencies += RuntimeDOM

...和JSApp文件:

package ca.vgorcinschi.algorithms1_4_34

import scala.scalajs.js.JSApp
import org.scalajs.jquery.jQuery

object HotAndColdJS extends JSApp{

   def main(): Unit = {
     jQuery(()=>setupUI())
  }

  def addClickedMessage():Unit ={
    jQuery("body").append("<p>You clicked the button!</p>")
  }

  def setupUI():Unit = {
    //click envokes an event handler
    jQuery("#click-me-button").click(()=> addClickedMessage())
    jQuery("body").append("<p>Hello World!</p>")
  }
}

我可以毫无问题地运行compilefastOptJSreloadeclipse(我正在使用eclipsePlugin)命令。唯一的问题是run命令。为了公平起见,我确实在本教程的流程中添加了一些内容,但仅仅是因为从应用程序的根目录运行此命令(npm install jsdom)导致run中的失败(npm WARN enoent ENOENT) 。按照建议here进行此操作后,我跑了:

npm init
npm install
npm install jsdom

这就是我现在所处的位置。这是使用run运行应用时遇到的错误:

> run
[info] Running ca.vgorcinschi.algorithms1_4_34.HotAndColdJS
[error] [stdin]:40
[error]     virtualConsole: jsdom.createVirtualConsole().sendTo(console),
[error]                           ^
[error] 
[error] TypeError: jsdom.createVirtualConsole is not a function
[error]     at [stdin]:40:27
[error]     at [stdin]:61:3
[error]     at ContextifyScript.Script.runInThisContext (vm.js:23:33)
[error]     at Object.runInThisContext (vm.js:95:38)
[error]     at Object.<anonymous> ([stdin]-wrapper:6:22)
[error]     at Module._compile (module.js:571:32)
[error]     at evalScript (bootstrap_node.js:391:27)
[error]     at Socket.<anonymous> (bootstrap_node.js:188:13)
[error]     at emitNone (events.js:91:20)
[error]     at Socket.emit (events.js:188:7)
org.scalajs.jsenv.ExternalJSEnv$NonZeroExitException: Node.js with JSDOM exited with code 1
    at org.scalajs.jsenv.ExternalJSEnv$AbstractExtRunner.waitForVM(ExternalJSEnv.scala:107)
    at org.scalajs.jsenv.ExternalJSEnv$ExtRunner.run(ExternalJSEnv.scala:156)
    at org.scalajs.sbtplugin.ScalaJSPluginInternal$.org$scalajs$sbtplugin$ScalaJSPluginInternal$$jsRun(ScalaJSPluginInternal.scala:697)
    at org.scalajs.sbtplugin.ScalaJSPluginInternal$$anonfun$73$$anonfun$apply$48$$anonfun$apply$49.apply(ScalaJSPluginInternal.scala:814)
    at org.scalajs.sbtplugin.ScalaJSPluginInternal$$anonfun$73$$anonfun$apply$48$$anonfun$apply$49.apply(ScalaJSPluginInternal.scala:808)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) org.scalajs.jsenv.ExternalJSEnv$NonZeroExitException: Node.js with JSDOM exited with code 1
[error] Total time: 4 s, completed 23-May-2017 9:24:20 PM

如果有人能帮我一把,我将不胜感激。

1 个答案:

答案 0 :(得分:3)

jsdom v10引入了一些重大改变。 v9和Scala.js&lt; = 0.6.15没有为那些人准备。这就是导致您遇到错误的原因。

升级到Scala.js 0.6.16将解决您的问题。它支持jsdom v9和v10。