如何模糊全局函数名
how to minfy/obfuscate global function names?
我有一些代码,格式如下:
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。让您完全控制哪些符号被混淆了,哪些符号没有,这样您就可以精确地管理这样的情况。无需更改您的工作代码。
我为他们工作
请参阅闭包编译器的在线文档。
换句话说:
- "导出"要保留的功能
- 创建一个包含你不想重命名的函数的"externs"文件
- 高级模式下运行闭包编译器
您可以在代码中对常用的jQuery函数进行本地引用,然后将其最小化?
例如:$(function() {
var jQueryAnimate = $.animate,
jQueryAddClass = $.addClass;
$('.foo').jQueryAddClass('.bar');
});
相关文章:
- javascript 中的全局函数
- 从全局函数调用Ember控制器上的方法
- Firefox扩展开发:如何在内容脚本中创建一个全局函数,以便其他加载的脚本文件可以访问它
- Javascript-匿名函数中使用参数引用全局函数的闭包-我如何使用preventDefault
- 将我的nextPage()函数编写为全局函数,以便onclick事件可以访问它
- Ember.js-定义一个全局函数,该函数可以向操作返回值
- 如果有's是一个名为“”的全局函数;描述“;或“;它“;当使用诸如jasmine或mocha之类的测试框架时
- angularJS中的全局函数
- 如何在范围内创建全局函数
- JS恢复默认/全局函数
- 在方法中调用全局函数
- Javascript:全局变量转到“窗口”或“全局”,但全局函数不会.全球 FN 去哪儿了
- 高级闭包兼容性和静态类型 - 使用未定义类型和全局函数,如localStorage.getItem();
- 如何显式引用全局函数
- Javascript中是否有“全局函数”或“主函数”
- 使用离子框架改变全局函数的状态
- 如何在方法中添加事件侦听器时调用 removeEventLisener 并在 JavaScript 中的全局函数中调用
- 如何在 JavaScript 中覆盖全局函数,但保留对原始函数的引用
- 如何使用 JQuery 和 Ajax 写入全局函数
- JS:使全局函数成为对象的值