如果存在 eval ist,uglifyjs 不会破坏变量

uglifyjs does not mangle variables if eval ist present

如果 "eval()" 存在,

uglify 不会破坏变量。 命令行:

uglifyjs script/script.js --compress --mangle --unsafe /path/to/script

示例:

(function(window, document, $) {
    "use strict";
    var test = function( $data )
    {
        eval( $data );
    };
    test( '' );
})(window, document, jQuery);

结果:

!function(window,document,$){"use strict";var test=function($data){eval($data)};test("")}(window,document,jQuery);

预计:

!function(n,t,u){"use strict";var c=function(n){eval(n)};c("")}(window,document,jQuery);

我最近遇到了这个问题,虽然这个问题现在已经很老了,但我想我找到了解决方案。

原因是 eval() 理论上可以从那里的父作用域访问事物;您可以将 "test" 作为字符串传递,它实际上会 return 函数包装 eval。

当我为没有 JSON.parse 实现的运行时添加回退到 eval() 时,我的项目开始出现这种情况。

在较新版本的 Uglify 中,您似乎可以根据文档禁用此功能:

To enable the mangler you need to pass --mangle (-m). The following (comma-separated) options are supported:

  • toplevel — mangle names declared in the toplevel scope (disabled by default).
  • eval — mangle names visible in scopes where eval or with are used (disabled by default).

Source