到目前为止,我认为这是一个简单的设置;我有core.js
,signup.js
和login.js
,其中假设核心在每个signup.js
和login.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.js
和signup.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
进行命名?
答案 0 :(得分:1)
模块标志分割文件。它没有表明文件是在不同的页面上加载的。
您最好的选择是使用不同的变量名称,使用函数包装器隔离范围或使用commonjs或es6模块。