Closure Compiler为不同的文件抛出“Variable ...声明不止一次”

时间:2018-05-05 14:49:28

标签: javascript google-closure-compiler

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

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

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标志时出错,或者遗漏了哪些内容表明这些文件从未联系过?或者我是否应养成从每个子/页特定JS文件中添加变量的习惯,例如使用$SignUp_Form$Login_Form进行命名?

1 个答案:

答案 0 :(得分:1)

模块标志分割文件。它没有表明文件是在不同的页面上加载的。

您最好的选择是使用不同的变量名称,使用函数包装器隔离范围或使用commonjs或es6模块。