尝试为我的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/

10-12 00:02