使用 ScalaJSBundlerPlugin(webpack 捆绑器)时无法从 Javascript 访问 JSExport
JSExport not accessible from Javascript when using ScalaJSBundlerPlugin (webpack bundler)
我正在尝试以下找到的 scalajs 导出的 hello world 示例 here:
@JSExportTopLevel("HelloWorld")
object HelloWorld {
@JSExport
def sayHello(): Unit = {
println("Hello world!")
}
}
我的 html 看起来像这样:
<!DOCTYPE html>
<html>
<head>
<title>Example Scala.js application</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body style="margin: 0px">
<script type="text/javascript" src="./../../../target/scala-2.13/scala-js-tutorial-fastopt.js"></script>
<script>
HelloWorld.sayHello();
</script>
</body>
</html>
效果很好。
现在,如果我尝试使用 ScalaJSBundlerPlugin(在后台使用 webpack),运行 fastOptJS::webpack
并将路径更改为“./../../../target/scala-2.13/scalajs-bundler/main/scala-js-tutorial-fastopt-bundle.js”,我得到“HelloWorld 未定义”。
捆绑后如何访问 HelloWorld?
默认情况下,scalajs-bundler 使用“应用程序”捆绑模式,可以丢弃 top-level 导出。如the cookbook explains,当使用@JSExportTopLevel
时,需要使用“LibraryAndApplication”捆绑模式,使用
webpackBundlingMode := BundlingMode.LibraryAndApplication()
我正在尝试以下找到的 scalajs 导出的 hello world 示例 here:
@JSExportTopLevel("HelloWorld")
object HelloWorld {
@JSExport
def sayHello(): Unit = {
println("Hello world!")
}
}
我的 html 看起来像这样:
<!DOCTYPE html>
<html>
<head>
<title>Example Scala.js application</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body style="margin: 0px">
<script type="text/javascript" src="./../../../target/scala-2.13/scala-js-tutorial-fastopt.js"></script>
<script>
HelloWorld.sayHello();
</script>
</body>
</html>
效果很好。
现在,如果我尝试使用 ScalaJSBundlerPlugin(在后台使用 webpack),运行 fastOptJS::webpack
并将路径更改为“./../../../target/scala-2.13/scalajs-bundler/main/scala-js-tutorial-fastopt-bundle.js”,我得到“HelloWorld 未定义”。
捆绑后如何访问 HelloWorld?
默认情况下,scalajs-bundler 使用“应用程序”捆绑模式,可以丢弃 top-level 导出。如the cookbook explains,当使用@JSExportTopLevel
时,需要使用“LibraryAndApplication”捆绑模式,使用
webpackBundlingMode := BundlingMode.LibraryAndApplication()