问题描述
|
我有一些具有以下格式的代码:
function myfunc1 () { ... jquery.bind(\'click\',myfunc2) ... }
function myfunc2 () { ... }
...
是的,这些函数是全局的,但是没关系,因为我是在google chrome扩展程序内容脚本中编写的,因此已沙盒化。
现在,我正在尝试最小化和混淆代码。我已经尝试过YUI Compressor和Google Closure编译器。问题是,我不知道如何缩小/混淆全局函数名称。使用YUI不会最小化全局变量,以防它们在外部被调用。在高级模式下,使用Closure似乎可以重命名全局变量,但是我在删除无效代码方面遇到了问题。大多数函数似乎已死机,因为它们依赖于DOM交互和事件处理,因此无法直接调用。
那么关于如何最小化这些全局变量的任何想法?我是否只需要编写脚本来进行一些正则表达式替换?如果更适合缩小模式,我也愿意重构我的代码(例如,添加到闭包之类的东西)
解决方法
缩小符不会修改公共/全局名称,因为对于许多脚本而言,它们会破坏公共API的可用性和可预测性。
由于您不需要维护公共API,因此通过将它们包装在闭包函数中使其成为“私有”即可:
(function () {
function myfunc1 () { ... jquery.bind(\'click\',myfunc2) ... }
function myfunc2 () { ...
...
})();
但是,即使那样,也无法保证,这是由缩小者的作者自行决定的。
,请参阅语义设计JavaScript混淆器。使您可以完全控制哪些符号被混淆,哪些没有被混淆,因此您可以管理这种情况。无需更改您的工作代码。
我为他们工作。
,请参阅Closure编译器的在线文档。
换一种说法:
\“导出\”要保留的功能
使用您不想重命名的功能制作一个“ externs”文件
在高级模式下运行Closure编译器
,您可以在代码中对常用的jQuery函数进行本地引用,然后将其最小化?
例如:
$(function() {
var jQueryAnimate = $.animate,jQueryAddClass = $.addClass;
$(\'.foo\').jQueryAddClass(\'.bar\');
});