如何使用scalajs打捆使用客户端唯一的应用程序(How to use scalajs-bundl

2019-09-29 20:28发布

在另一个问题 ,我建议使用ScalaJS打捆导入NPM的依赖。

我想在一个简单的只有客户端的Web应用程序使用一些JavaScript NPM包。 有称为静态的例子 ,显示这一点。 我改变的例子:

添加到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"

门面(有点简单化,全版本看到的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
}

当运行生成的HTML fastOptJS::webpack错误的是:

遗漏的类型错误:无法读取的未定义的属性“记号化”

检查static-fastopt-bundle.js显示esprima被使用,但它的JS是不是捆绑在一起。

哪些其他措施都需要依赖加入到一个只有客户端的网页?

Answer 1:

正如在描述这一部分的文档,你必须使用@JSImport在门面的定义:

@JSImport("esprima", JSImport.Namespace)

作为参考, @JSName定义绑定到全局名称的门面,而@JSImport定义绑定到一个门面require ð的JavaScript模块。



文章来源: How to use scalajs-bundler with client only app