在Closure Compiler中跳过全局变量冲突

时间:2012-11-28 12:57:10

标签: javascript node.js google-closure-compiler

我正在使用HTML5 WebWorkers,我遇到了这样的问题(使用闭包编译器编译脚本时):

我有两个文件(.js),其中包含以下代码:

...

var encoder = null;

...

换句话说,我有两个同名的全局变量。

这些文件将用作我想要启动的两个工作者的源,并且据我所知,这两个文件将在它们自己的范围内执行,并且在运行时不会发生冲突。

另一个条件是我想一次编译两个文件(模块)

--module module1:1

--js file

--module module2:1

--js file2.js

但是,Closure Compiler检测到冲突并说,module2应该依赖于module1,因为它们都有相同的全局变量。

我该怎么办?

1 个答案:

答案 0 :(得分:3)

有几种不同的选择:

  1. 将变量用作全局(窗口)对象的属性。定义如下:window.encoder = window['encoder'] || {};
  2. 向第二个变量定义添加@suppress {duplicate}注释。
  3. 添加一个立即执行的匿名函数包装器,以将变量定义移出全局范围。然后,您可能需要显式导出变量以全局重新公开它。