1

另一个问题中,有人建议我使用ScalaJS 捆绑器来导入 NPM 依赖项。

我想在一个简单的仅限客户端的 Web 应用程序中使用一些 Javascript NPM 包。有一个名为 static 的示例显示了这一点。我对示例的更改:

添加到 build.sbt:

npmDependencies in Compile += "esprima" -> "3.1.3"

添加到 Main.scala:

import Esprima._
import JsonToString._
val code = "answer = 42"
val tokens = tokenize(code)
val tokensStr = tokens.json

改变Main.scala"This is bold"变成s"This is bold $tokensStr"

Facade(有点简化,完整版本见GitHub):

import scala.scalajs.js
import scala.scalajs.js.annotation.JSName

@JSName("esprima")
@js.native
object Esprima extends js.Object {

  def tokenize(input: String, config: js.Any = js.native, delegate: String => String = js.native): js.Array[js.Any] = js.native

  def parse(input: String, config: js.Any = js.native): js.Dynamic = js.native
}

运行时生成的 htmlfastOptJS::webpack错误为:

未捕获的类型错误:无法读取未定义的属性“tokenize”

使用了检查static-fastopt-bundle.js节目esprima,但没有捆绑它的js。

将依赖项添加到仅限客户端的网页中还需要哪些其他步骤?

4

1 回答 1

2

如文档的这一部分所述,您必须@JSImport在外观定义中使用:

@JSImport("esprima", JSImport.Namespace)

作为参考,@JSName定义了一个绑定到全局名称@JSImport的外观,同时定义了一个绑定到required JavaScript 模块的外观。

于 2017-02-03T16:06:46.960 回答