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

时间:2015-11-16 20:43:15

标签: 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);

结果:

!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);

1 个答案:

答案 0 :(得分:5)

我最近自己遇到过这个问题,虽然这个问题现在已经很久了,但我认为我找到了解决方案。

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

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

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

  

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

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

Source