Я использую 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, вероятно, думает, что корневая переменная — это структура данных, которую нужно оставить как есть и нельзя изменить. Есть ли способ позволить UglifyJS изменять вложенные имена в корневом пространстве имен?