Closure Compiler 为不同的文件抛出 "Variable ... declared more than once"

Closure Compiler throws "Variable ... declared more than once" for different files

到目前为止,我认为这是一个简单的设置;我有 core.jssignup.jslogin.js,其中假定在每个 signup.jslogin.js 以及 login.js 之前加载核心signup.js 永远不会同时加载到同一页面上。

这是我使用 --module 标志将 JS 文件编译成不同模块的命令

java -jar ../../compilers/closure-compiler.jar \
--module core:1: --js ../../js/core.js \
--module signup:1:core: --js ../../js/signup.js \
--module login:1:core: --js ../../js/login.js \
--compilation_level ADVANCED_OPTIMIZATIONS \
--externs ../../externs/jquery-3.3.js \
--externs ../../externs\sweetalert2.js \
--externs ../../externs\grecaptcha.js

并且 login.jssignup.js 中的每一个都有自己的形式,所以我在每个变量中都有一个名为 $Form 的变量,就像这样

var $Form = $('#login');

但是运行我的文件上的命令给出了以下错误

../../js/login.js:13: ERROR - Variable $Form declared more than once. First occurrence: ../../js/signup.js
var $Form = $('#login');
    ^^^^^^^^^^^^^^^^^^^

我是在 --module 标志上做错了什么,还是遗漏了一些表明这些文件从未接触过的东西?或者我应该养成从每个 child/page 特定的 JS 文件开始我的变量的习惯,比如使用 $SignUp_Form$Login_Form 来命名?

模块标志拆分文件。它没有任何迹象表明文件是在单独的页面上加载的。

你最好的选择是要么使用不同的变量名,要么使用函数包装器隔离作用域,要么使用 commonjs 或 es6 模块。