如果存在 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).
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).