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);
答案 0 :(得分:5)
我最近自己遇到过这个问题,虽然这个问题现在已经很久了,但我认为我找到了解决方案。
原因是eval()理论上可以从那里的父范围访问事物;你可以将“test”作为字符串传递,它实际上会返回包装eval的函数。
当我在没有JSON.parse实现的情况下为运行时添加回退到eval()时,这开始在我的项目中发生。
在更新版本的Uglify中,您可以根据文档禁用此功能:
要启用mangler,您需要传递--mangle(-m)。支持以下(逗号分隔)选项:
- toplevel - 在顶层范围内声明的mangle名称(默认情况下禁用)。
- eval - 在使用eval或with的范围内可见的mangle名称(默认情况下禁用)。