如果存在"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名称(默认情况下禁用).