Scala.js ExternalJSEnv不';在launcher网页中看不到javascript依赖项
简单设置:Scala.js ExternalJSEnv不';在launcher网页中看不到javascript依赖项,scala.js,Scala.js,简单设置: lazy val root = project.in(file(".")) .settings(scalaJSSettings: _*) .settings(utestJsSettings: _*) .settings(persistLauncher := true) .settings(persistLauncher in Test := false) .settings( name := "bindings", version := "0.0.1-
lazy val root = project.in(file("."))
.settings(scalaJSSettings: _*)
.settings(utestJsSettings: _*)
.settings(persistLauncher := true)
.settings(persistLauncher in Test := false)
.settings(
name := "bindings",
version := "0.0.1-SNAPSHOT",
scalaVersion := "2.11.2",
libraryDependencies ++= Seq(
"org.scala-lang.modules.scalajs" %%% "scalajs-dom" % "0.6",
"com.lihaoyi" %%% "utest" % "0.2.3" % "test"
),
jsDependencies += "org.webjars" % "d3js" % "3.4.11" / "d3.js", //d3.min.js
autoCompilerPlugins := true,
test in Test := (test in(Test, fastOptStage)).value,
requiresDOM := true,
traceLevel := 0
)
phantomjs-launcher-webpage.html包含非常有效的内容:
<script type="text/javascript" src="/path/scalajs-bindings/target/scala-2.11/classes/d3.js"></script>
<script type="text/javascript" src="/path/scalajs-bindings/target/scala-2.11/bindings-fastopt.js"></script>
<script type="text/javascript">
// Phantom.js code launcher
// Origin: /path/scalajs-bindings/target/scala-2.11/bindings-launcher.js
window.addEventListener('load', function() {
((typeof global === "object" && global &&
global["Object"] === Object) ? global : this)["com"]["whatever"]["scalajs"]["Appp"]().main();
}, false);
</script>
它不起作用的原因是我在包对象中有d3对象:
package object mbostock {
object d3 {...}
}
它也不能作为内部类工作:
object Appp extends JSApp {
object d3 {...}
override def main(): Unit = {...}
}
您可以让您的对象
d3
扩展js.GlobalScope
,它将在全局JavaScript范围内查找(即d3.js
将它放在哪里):
<>但是,在<代码> d3的情况下,您可能需要考虑< <代码> d3>代码>包对象本身扩展<代码> js.GualLabeS> <代码>:
package mbostock
package object d3 extends js.GlobalScope {
def scale: js.Dynamic = ???
}
我强烈建议阅读,特别是关于的部分。我正在研究这一点。很快:你能在
Appp
中添加d3
的定义吗?你在类路径上有自己的d3.js
吗?jsDependency解析仅按文件名执行。您似乎没有从jar中获得d3.js
。如果您取消注释d3.min.js
,它是否有效?将d3对象添加到Appp->TypeError:undefined不是对象(评估'ScalaJS.g[“Appp$d3”][“scale”])
。。。我在src/main/resources
中有d3.js。。。它实际存在于target/scala-2.11/classes/d3.js
中。。。我尝试取消注释d3.min.js。。。我也用d3.min.js试用过它-它也不起作用。。。顺便说一句,如果我将jquery添加到jsDependencies中,它就可以工作了,它不能是Appp中的内部类,如果它在Appp.scala中,但与Appp对象处于同一级别,它就可以工作。。。它不作为内部类工作,也不在我最初使用它的包对象
中工作这些发现非常痛苦,我希望它不会作为内部类工作,但我真的没想到它不会在包对象
中工作。。。Scala能做的太多了,以至于所有的可能性都无法涵盖,这是不可能的:-)
object Appp extends JSApp {
object d3 extends js.GlobalScope {
def scale: js.Dynamic = ???
}
override def main(): Unit = {
val fill = d3.scale.category20()
println(fill)
}
}
package mbostock
package object d3 extends js.GlobalScope {
def scale: js.Dynamic = ???
}