例如,在激进模式下,Google Closure将重命名功能。如果有人将我的闭包编译脚本与另一个脚本一起编译并使用闭包编译,那么是否会重命名可能发生的冲突?
简而言之,我想缩小我的代码,但它会在其他网站上使用,我希望避免与其他脚本发生冲突。
答案 0 :(得分:2)
您总是不得不担心JavaScript中全局范围中定义的变量冲突, REGARDLESS 是否缩小了脚本。如果想要最小化碰撞机会,请使用功能性封装包装来包装代码。
Closure的高级模式只会使潜在的碰撞变得更糟,因为它会将许多对象编译成新的全局对象(命名相似,例如a
,b
等)以获得最快的性能。这就是为什么Closure的高级模式最好与所有程序文件一起使用,而不是零碎的。
像ga.js
(Google Analytics)这样的设计是为了让它们只向全局范围公开一些对象,其他所有内容都包含在一个闭包中。文件本身已经过积极优化。注意 - 最小化/未最小化的事实与碰撞无关。您可以拥有一个包含大量冲突的普通脚本JavaScript文件,或者您可以拥有一个没有冲突的高度优化的脚本。
碰撞与缩小或变量重命名无关。通过避免在全局范围内创建对象来避免冲突。在全局范围内未创建的任何其他内容不会与其他脚本发生冲突。例如,如果您加载另一个覆盖ga.js
或_gat
个全局变量的脚本,则 CAN 会发生_gaq
冲突。试试吧,谷歌分析将不再有效。换句话说,ga.js
适用于不同的网页不,因为它是无冲突的,但是因为它创建了全局变量(即_gat
和_gaq
)其他脚本选择的不太可能的名称。
答案 1 :(得分:-2)
你最好使用YUICompressor,它不那么具有侵略性,并且不会缩小任何看似外部的东西。