【问题标题】:scalaks-bootstrap: Uncaught ReferenceError: exports is not defined at scalajsenv.js:29scalaks-bootstrap:未捕获的 ReferenceError:未在 scalajsenv.js:29 定义导出
【发布时间】:2019-07-25 11:39:21
【问题描述】:

我尝试制作一个简单的 scalajs + scalajs-bootstrap 应用程序,但是关于如何设置骨架的文档很少。 scalajs-bootstrap 项目有一个示例,但是 build.sbt 文件非常大,它既包含 scalajs-bootstrap 的源代码,也包含示例本身。

我尝试仅使用 bootstrap4 示例创建一个新项目,但是当我在浏览器上打开 index.html 页面时,它会抱怨

Uncaught ReferenceError: exports is not defined at scalajsenv.js:29

这是我目前的设置:

项目/plugins.sbt

addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.20")
addSbtPlugin("com.github.karasiq" % "sbt-scalajs-bundler" % "1.2.1")
addSbtPlugin("ch.epfl.scala" % "sbt-scalajs-bundler" % "0.13.0")

build.sbt

enablePlugins(ScalaJSBundlerPlugin)

scalaVersion := "2.12.6"
libraryDependencies += "org.scala-js" %%% "scalajs-dom" % "0.9.7"
libraryDependencies += "com.github.karasiq" %%% "scalajs-bootstrap-v4" % "2.3.5"

npmDependencies in Compile += "jquery" -> "3.2.1"
npmDependencies in Compile += "bootstrap" -> "4.1.1"

mainClass in Compile := Some("com.karasiq.bootstrap4.test.frontend.BootstrapTestApp")
scalaJSUseMainModuleInitializer := true

scalaJSModuleKind := ModuleKind.CommonJSModule
version in webpack := "4.28.4"
emitSourceMaps := false

这是 scalajs-bootstrap4 库的源代码和示例: https://github.com/Karasiq/scalajs-bootstrap

这是我完整的最小示例,失败并出现 exports is not defined 错误: https://github.com/dportabella/scalajs-bootstrap4-examples

如何修改 plugins.sbt 和/或 build.sbt 以使该项目正常运行?


解决方案

项目/plugins.sbt

addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.28")
addSbtPlugin("ch.epfl.scala" % "sbt-scalajs-bundler" % "0.13.0")

build.sbt

enablePlugins(ScalaJSBundlerPlugin)

scalaVersion := "2.12.8"
libraryDependencies += "org.scala-js" %%% "scalajs-dom" % "0.9.7"
libraryDependencies += "com.github.karasiq" %%% "scalajs-bootstrap-v4" % "2.3.5"

npmDependencies in Compile += "jquery" -> "3.2.1"
npmDependencies in Compile += "bootstrap" -> "4.1.1"

mainClass in Compile := Some("com.karasiq.bootstrap4.test.frontend.BootstrapTestApp")
scalaJSUseMainModuleInitializer := true

scalaJSModuleKind := ModuleKind.CommonJSModule
version in webpack := "4.28.4"
emitSourceMaps := false

完整示例: https://github.com/dportabella/scalajs-bootstrap4-examples

【问题讨论】:

    标签: scala.js scalajs-bundler


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      根据我的经验,您需要:

      • 将以下行添加到您的project/plugins.sbt
      addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.25")
      addSbtPlugin("ch.epfl.scala" % "sbt-scalajs-bundler" % "0.13.1")
      
      • 在您的build.sbt 中同时启用ScalaJSPluginScalaJSBundlerPlugin
      • 将以下配置添加到您的build.sbt
      scalaJSUseMainModuleInitializer := true
      scalaJSModuleKind := ModuleKind.CommonJSModule
      version in webpack := "4.28.4"
      emitSourceMaps := false
      

      最后,运行fastOptJS::webpack创建打包好的JS文件。

      注意打包后的JS文件需要在index.html中引用——不是编译后的JS文件!

      我希望这会有所帮助。

      【讨论】:

      • npm ERR! Error: EACCES: permission denied 的问题已通过删除我的 ~./npm 文件夹并再次运行 sbt 得到解决。但是,在浏览器上打开 index.html 文件时,它仍然失败并显示 Uncaught ReferenceError: exports is not defined at scalajsenv.js:29
      • 现在可以使用了;请参阅stackoverflow.com/a/57203275/280393 但是它使用 0.15.0(而不是 0.13.0)的插件 ch.epfl.scala:sbt-scalajs-bundler 失败。有什么想法吗?
      猜你喜欢
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 2018-01-21
      • 2019-02-28
      • 2021-02-28
      • 1970-01-01
      • 2023-01-23
      相关资源
      最近更新 更多