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

dou*_*max 2 eval uglifyjs

如果存在"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);
Run Code Online (Sandbox Code Playgroud)

结果:

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

预期:

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

小智 5

我最近自己遇到过这个问题,虽然这个问题现在很老了,但我认为我找到了解决办法.

这样做的原因是eval()理论上可以从那里的父范围访问事物; 你可以传递"test"作为字符串,它实际上会返回包装eval的函数.

当我在没有JSON.parse实现的情况下为运行时添加回退到eval()时,这开始在我的项目中发生.

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

要启用mangler,您需要传递--mangle(-m).支持以下(逗号分隔)选项:

  • toplevel - 在顶层范围内声明的mangle名称(默认情况下禁用).
  • eval - 在使用eval或with的范围中可见的mangle名称(默认情况下禁用).

资源