如何模糊全局函数名

how to minfy/obfuscate global function names?

本文关键字:全局 函数 模糊 何模糊      更新时间:2023-09-26

我有一些代码,格式如下:

function myfunc1 () { ... jquery.bind('click', myfunc2) ... }
function myfunc2 () { ... }
...

是的,函数是全局的,但没关系,因为我在谷歌chrome扩展内容脚本内编写,所以它是沙盒。

现在,我试图缩小和混淆代码。我尝试过YUI压缩器和谷歌闭包编译器。问题是,我不知道如何缩小/混淆全局函数名称。在YUI中,它不会最小化全局变量,以防它们被外部调用。关闭在高级模式下,它似乎可以重命名全局变量,但我有死代码删除的问题。大多数函数似乎是死的,因为它们依赖于DOM交互和事件处理,而不是直接调用。

对于如何最小化这些全局变量有什么想法吗?我需要只是写一个脚本做一些正则表达式替换吗?我也愿意重构我的代码,如果这将更适合缩小模式(例如,添加到闭包或诸如此类)

Minifiers不会修改公共/全局名称,因为对于许多脚本来说,这会破坏公共API的可用性和可预测性。

因为你不需要维护一个公共API,通过将它们包装在闭包函数中使它们"私有"可能就足够了:

(function () {
    function myfunc1 () { ... jquery.bind('click', myfunc2) ... }
    function myfunc2 () { ... 
    ...
})();

但是,即使这样,也不能保证,因为这在很大程度上是由minifier的作者决定的。

参见Semantic Designs JavaScript Obfuscator。让您完全控制哪些符号被混淆了,哪些符号没有,这样您就可以精确地管理这样的情况。无需更改您的工作代码。

我为他们工作

请参阅闭包编译器的在线文档。

换句话说:

  1. "导出"要保留的功能
  2. 创建一个包含你不想重命名的函数的"externs"文件
  3. 高级模式下运行闭包编译器

您可以在代码中对常用的jQuery函数进行本地引用,然后将其最小化?

例如:

$(function() {
   var jQueryAnimate = $.animate,
       jQueryAddClass = $.addClass;
   $('.foo').jQueryAddClass('.bar');
});