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

问题描述

使用 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 的解决方案也几乎适用于其他工具。只是设置的工作方式可能略有不同。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...