问题描述
我最近发现了 Google 闭包编译器,它的功能似乎非常好。
话虽如此,我在一次使用多个外部代码文件时遇到了问题。 例如,在我的 html 文件中,我可能嵌入了两个不同的 javascript 代码:
<script src="code1.js"></script>
<script src="code2.js"></script>
现在我可以轻松地使用 Closure 编译器通过高级优化单独编译和压缩这两个脚本,但是这两个脚本可能(并且很可能会)出现问题,因为这两个脚本相互覆盖/函数被覆盖。>
根据我自己的研究 (reading all the guides on developers.google.com/closure/compiler),似乎有三种解决方案:
这里的问题是我不能这样做,因为此 javascript 代码的一部分特定于此 html 文件,而另一部分也在其他地方使用。
除非有某种方法可以自动执行此操作,否则在我的情况下手动工作太多,无法实现。
- 使用 SIMPLE_OPTIMIZATIONS 作为优化级别
这就是我目前正在做的事情,但显然,如果有一种(现实的)方法来使用更高级的优化,我更愿意使用它们。
澄清一下,这两个脚本不相互引用,单独手动优化两者不起作用的唯一原因是因为闭包编译器可能会在第一个脚本中命名一个函数 a(b,c)
,然后在第二个脚本中命名另一个函数脚本 a()
也是如此,从而覆盖了第一个的引用和函数。
如果有办法
解决方法
推荐使用
--isolation_mode=IIFE
。这将编译器的整个输出包装在“立即调用的函数表达式”(IIFE) 中,它隔离了所有未在 IFFE 中的全局对象上显式设置的全局符号,并防止您所描述的冲突。