如何在仅客户端应用程序中使用 scalajs-bundler
How to use scalajs-bundler with client only app
在 I was advised to use ScalaJS bundler导入NPM依赖。
我想在一个简单的仅客户端 Web 应用程序中使用一些 Javascript NPM 包。 an example called 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
}
当 运行 使用 fastOptJS::webpack
生成 html 时,错误是:
Uncaught TypeError: Cannot read property 'tokenize' of undefined
检查 static-fastopt-bundle.js
显示使用了 esprima
,但其 js 未捆绑。
将依赖项添加到仅限客户端的网页还需要哪些其他步骤?
如文档 this part 中所述,您必须在外观定义中使用 @JSImport
:
@JSImport("esprima", JSImport.Namespace)
作为参考,@JSName
定义了绑定到全局名称的外观,而 @JSImport
定义了绑定到 require
d JavaScript 模块的外观。
在
我想在一个简单的仅客户端 Web 应用程序中使用一些 Javascript NPM 包。 an example called 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
}
当 运行 使用 fastOptJS::webpack
生成 html 时,错误是:
Uncaught TypeError: Cannot read property 'tokenize' of undefined
检查 static-fastopt-bundle.js
显示使用了 esprima
,但其 js 未捆绑。
将依赖项添加到仅限客户端的网页还需要哪些其他步骤?
如文档 this part 中所述,您必须在外观定义中使用 @JSImport
:
@JSImport("esprima", JSImport.Namespace)
作为参考,@JSName
定义了绑定到全局名称的外观,而 @JSImport
定义了绑定到 require
d JavaScript 模块的外观。