Пытаюсь подготовить хорошую среду сборки для моей js-библиотеки. Судя по отзывам в сети , UglifyJSкажется одним из лучших модулей сжатия, работающих под NodeJS. Итак, вот лучший рекомендуемый способ минимизации кода:
var jsp = require("uglify-js").parser;
var pro = require("uglify-js").uglify;
var orig_code = "... JS code here";
var ast = jsp.parse(orig_code); // parse code and get the initial AST
ast = pro.ast_mangle(ast); // get a new AST with mangled names
ast = pro.ast_squeeze(ast); // get an AST with compression optimizations
var final_code = pro.gen_code(ast); // compressed code here
Как видно здесь, pro.ast_mangle(ast)
должен изменять имена переменных, но это не так. Все, что я получаю из этой трубы, это код javascript без пробелов. Сначала я подумал, что мой код не оптимизирован для сжатия, но потом я попробовал его с помощью Google Closureи получил неплохое сжатие (с искаженными именами переменных и всем остальным).
Эксперты UglifyJS, есть намеки на то, что я делаю неправильно?
ОБНОВЛЕНИЕ:
Фактический код слишком велик, чтобы ссылаться на него здесь, но даже фрагмент, подобный этому, не искажается:
;(function(window, document, undefined) {
function o(id) {
if (typeof id !== 'string') {
return id;
}
return document.getElementById(id);
}
// ...
/** @namespace */
window.mOxie = o;
}(window, document));
Вот что я получаю (только пробелы, я думаю):
(function(window,document,undefined){function o(id){return typeof id!="string"?id:document.getElementById(id)}window.mOxie=window.o=o})(window,document)