我使用 UglifyJS 来缩小一组连接的文件,效果很好,但还不够好。构建的库使用命名空间,因此类、函数和常量存储在根命名空间变量中:
(function() {
var root = { api:{}, core:{}, names:{} };
/* util.js file */
root.names.SOME_LONG_NAMED_CONST='Angel';
/* Person.js file */
root.core.Person = function(name) { this.name = name };
/* API.js with the functions we want to expose */
root.api.perform = function(param_for_api) { /* do something */ }
window.lib_name.perform = root.api.perform;
})();
它被缩小到不那么最小的版本
(function(){var a={api:{},core:{},names:{}};a.names.SOME_LONG_NAMED_CONST="Angel",a.core.Person=function(a){this.name=a},a.api.perform=function(){},window.lib_name.perform=a.api.perform})();
我理解 uglify 可能认为 root var 是一种数据结构,必须保持原样并且不能更改。有没有办法让 UglifyJS 破坏根命名空间中的嵌套名称?