$jscomp 未在为 clojurescript 和试剂加载的代码中定义

$jscomp not defined in code loaded for clojurescript and reagent

使用 clojurescript 1.10.758 和 reagent 1.0.0,我 运行 遇到一个错误,其中文件 index.js 试图引用 $jscomp,但未定义。

我已经看到许多 Whosebug 和 Github 与 $jscomp 相关的问题在 shadow-cljs 的上下文中未定义,但我没有使用它。

当我使用带有 figwheel 的开发模式构建时(将 Leiningen 与 cljsbuild 和 figwheel 插件一起使用),如果我将 cljsbuild 用于一次性开发构建,也会出现此问题。奇怪的是,如果我使用webpack创建一个bundle,这个问题就不会出现了。

在我尝试让 webpack 工作之前,我确实有没有 webpack 的工作代码。我更改的某些内容似乎影响了非捆绑构建。我能做的唯一改变是使用 npm 安装 react 和 react-dom,并在 Leiningen 的依赖项中从 reagent 中排除这些包。但是撤消排除并没有使非捆绑代码再次工作。

关于如何在第一次需要时定义 $jscomp 有什么建议吗?

$jscomp 与 Closure Compiler 及其创建的 Polyfill 相关。

调整 :language-out :es6 编译器选项可能就足够了,这有点类似于 shadow-cljs 使用的 :output-feature-set 选项。调试它的最佳方法是找到正在被 polyfill 的实际代码以及原因。不过可能需要深入研究一些已编译的 JS。

shadow-cljs 比常规的 CLJS 或 figwheel 更广泛地使用 Closure 编译器,但他们也使用它。适用于 shadow-cljs 的解决方案也几乎适用于其他工具。只是设置可能会有所不同。