如何使用 scala.js 和 sbt 的 ScalaJSBundler 创建客户端 javascript 页面?
How can you make a client-side javascript pages with scala.js and sbt's ScalaJSBundler?
我正在使用 scala.js 在浏览器中创建 javascript 代码 运行,由 akka-http 服务器提供。我主要使用 mill 作为我的构建工具,但后来想切换到 sbt,这样我就可以使用 ScalaJSBundler 插件进行 npm 依赖和打包。使用 sbt,当我执行 fastOpt 来编译我的 scala.js 代码时,javascript 代码的创建与 mill 创建的代码略有不同,它现在包含 require 语句(mill 构建没有),例如
var $i_react = require("react");
当此代码在我的浏览器中为 运行 时,要求显示为未定义。我在 scala.js 中导出的变量也未定义。我认为这是因为正在创建的代码是针对 ModuleKind.CommonJSModule(通过 sbt 设置 scalaJSModuleKind 设置的),但是当我尝试将其更改为 ModuleKind.ESModule 时,构建失败并显示:
scalaJSModuleKind must be set to ModuleKind.CommonJSModule in projects where ScalaJSBundler plugin is enabled
我是 javascript(和 scala.js)的新手。我究竟做错了什么?应该怎么做?
谢谢!
如 Getting Started of scalajs-bundler 中所述,您应该将 webpack/fastOptJS
的结果提供给浏览器,而不是 fastOptJS
。这是必要的,因为后者作为 CommonJS 模块发出,不适合浏览器,但随后由 Webpack 处理以生成前者,一个适合浏览器的包,还包含 npm 依赖项。
我正在使用 scala.js 在浏览器中创建 javascript 代码 运行,由 akka-http 服务器提供。我主要使用 mill 作为我的构建工具,但后来想切换到 sbt,这样我就可以使用 ScalaJSBundler 插件进行 npm 依赖和打包。使用 sbt,当我执行 fastOpt 来编译我的 scala.js 代码时,javascript 代码的创建与 mill 创建的代码略有不同,它现在包含 require 语句(mill 构建没有),例如
var $i_react = require("react");
当此代码在我的浏览器中为 运行 时,要求显示为未定义。我在 scala.js 中导出的变量也未定义。我认为这是因为正在创建的代码是针对 ModuleKind.CommonJSModule(通过 sbt 设置 scalaJSModuleKind 设置的),但是当我尝试将其更改为 ModuleKind.ESModule 时,构建失败并显示:
scalaJSModuleKind must be set to ModuleKind.CommonJSModule in projects where ScalaJSBundler plugin is enabled
我是 javascript(和 scala.js)的新手。我究竟做错了什么?应该怎么做?
谢谢!
如 Getting Started of scalajs-bundler 中所述,您应该将 webpack/fastOptJS
的结果提供给浏览器,而不是 fastOptJS
。这是必要的,因为后者作为 CommonJS 模块发出,不适合浏览器,但随后由 Webpack 处理以生成前者,一个适合浏览器的包,还包含 npm 依赖项。