我有一些代码具有以下格式:
function myfunc1 () { ... jquery.bind('click', myfunc2) ... }
function myfunc2 () { ... }
...
是的,这些功能是全局的,但是因为我在google chrome扩展内容脚本中编写,所以它是沙盒的。
现在,我正在尝试缩小和混淆代码。我已经尝试过YUI Compressor和Google Closure编译器。问题是,我无法弄清楚如何缩小/混淆全局函数名称。使用YUI时,如果它们被外部调用,它不会缩小全局变量。在高级模式下关闭,似乎它可以重命名全局变量,但是我遇到了死代码删除的问题。大多数函数似乎都已死,因为它们依赖于DOM交互和事件处理,并且不会直接调用。
那么关于如何缩小这些全局变量的任何想法?我是否需要编写脚本来进行一些正则表达式替换?我也愿意重构我的代码,如果这样可以更好地适应缩小模式(例如,添加到闭包或诸如此类的东西)
答案 0 :(得分:10)
Minifiers不会破坏公共/全局名称,因为对于许多脚本来说,这会破坏公共API的可用性和可预测性。
由于您不需要维护公共API,因此将它们包装在闭包函数中使它们成为“私有”可能就足够了:
(function () {
function myfunc1 () { ... jquery.bind('click', myfunc2) ... }
function myfunc2 () { ...
...
})();
但是,即便如此,也没有任何保证,因为它完全取决于minifier的作者。
答案 1 :(得分:1)
请参阅语义设计JavaScript Obfuscator。使您可以完全控制哪些符号被混淆,哪些不符号,这样您就可以管理这样的情况。无需更改您的工作代码。
我为他们工作。
答案 2 :(得分:1)
请参阅Closure Compiler的在线文档。
换句话说:
答案 3 :(得分:0)
您可以在代码中对常用的jQuery函数进行本地引用,然后将其缩小?
例如:
$(function() {
var jQueryAnimate = $.animate,
jQueryAddClass = $.addClass;
$('.foo').jQueryAddClass('.bar');
});