尝试为我的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)
最佳答案
好的,似乎最新版本的Uglify JS要求将mangle选项显式传递为true,否则它将不会发生任何困惑。像这样:
var jsp = require("uglify-js").parser;
var pro = require("uglify-js").uglify;
var orig_code = "... JS code here";
var options = {
mangle: true
};
var ast = jsp.parse(orig_code); // parse code and get the initial AST
ast = pro.ast_mangle(ast, options); // 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
关于javascript - Uglify-js不处理变量名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10959154/