问题描述
使用 clojurescript 1.10.758 和试剂 1.0.0,我遇到了一个错误,其中文件 index.js 尝试引用未定义的 $jscomp
。
我已经看到许多与 $jscomp 相关的 Stackoverflow 和 Github 问题在 shadow-cljs 的上下文中未定义,但我没有使用它。
当我使用带有 figwheel 的开发模式构建(使用 Leiningen 与 cljsbuild 和 figwheel 插件)时会出现问题,如果我使用 cljsbuild 进行一次性开发构建也会出现问题。奇怪的是,如果我用webpack来创建bundle,就没有出现这个问题。
在我尝试让 webpack 工作之前,我确实有没有 webpack 的工作代码。我改变的东西似乎影响了非捆绑构建。我能做的唯一改变是使用 npm 安装 react 和 react-dom,并从 Leiningen 依赖项中的试剂中排除这些包。但是取消排除并没有使非捆绑代码再次工作。
关于如何在第一次需要时定义 $jscomp
的任何建议?
解决方法
$jscomp
与 Closure Compiler 和它创建的 Polyfills 相关。
调整 :language-out :es6
编译器选项可能就足够了,它有点类似于 :output-feature-set
使用的 shadow-cljs
选项。调试此问题的最佳方法是找到正在填充的实际代码以及原因。不过可能需要深入研究一些已编译的 JS。
shadow-cljs
比常规 CLJS 或 figwheel 更广泛地使用闭包编译器,但他们也使用它。适用于 shadow-cljs
的解决方案也几乎适用于其他工具。只是设置的工作方式可能略有不同。