例如,在激进模式下,Google Closure 会重命名函数。如果有人将我的闭包编译脚本与另一个也使用闭包编译的脚本一起包含,是否可能发生重命名冲突?
简而言之,我想缩小我的代码,但它会在其他网站上使用,我想避免与其他脚本发生冲突。
例如,在激进模式下,Google Closure 会重命名函数。如果有人将我的闭包编译脚本与另一个也使用闭包编译的脚本一起包含,是否可能发生重命名冲突?
简而言之,我想缩小我的代码,但它会在其他网站上使用,我想避免与其他脚本发生冲突。
无论您是否缩小脚本,您总是必须担心在 JavaScript 的全局范围内定义的变量的冲突。如果您想最大程度地减少冲突的机会,请使用功能性闭包包装器来包装您的代码。
Closure 的高级模式只会使潜在的冲突变得更糟,因为它将许多对象编译成新的全局对象(名称类似,例如a
等b
)以获得最快的性能。这就是为什么 Closure 的高级模式最适合同时处理所有程序文件,而不是零碎的。
像ga.js
(谷歌分析)这样的东西被设计成只将少数对象暴露给全局范围,而其他所有东西都包裹在一个闭包中。文件本身已经过积极优化。当心 - 它被最小化/未最小化的事实与碰撞无关。您可以拥有一个包含大量冲突的纯脚本 JavaScript 文件,或者您可以拥有一个没有冲突的高度优化的脚本。
碰撞与缩小或变量重命名无关。您可以通过避免在全局范围内创建对象来避免冲突。未在全局范围内创建的任何其他内容都不会与其他脚本发生冲突。例如,如果您加载ga.js
另一个覆盖_gat
或_gaq
全局变量的脚本,您可能会发生冲突。试试吧,Google Analytics 将不再起作用。换句话说,ga.js
与不同的网页一起工作不是因为它没有冲突,而是因为它创建了全局变量(即_gat
和_gaq
),其名称不太可能被其他脚本选择。
你最好使用 YUICompressor,它的攻击性要小得多,而且不会缩小任何看起来是外部的东西。