我也是新uglifyjs。 我認爲這是一個很好的圖書館,但它缺乏良好的文檔或示例。 我認爲非常好用的uglifyjs的一個用途是創建一個靜態分析工具。 因此,我想分享一個我寫的小腳本,它在js文件中找到所有具有小名稱的變量,例如var d = 3; 這些變量名稱不是很具描述性,難以維護大型程序。 所以我要求至少3個字符長的變量名爲。 爲了讓事情變得更有趣,我們不應該在For..loops和For..in循環中將計數器變量標記爲缺陷。
那就是說我們可以創建這個smallVariables.js。
var smallVariableNames = [];
function addBadVariableName(line,value){
smallVariableNames.push(line + " "+value);
}
var UglifyJS = require("../tools/node"); //Please install node first
var parser = UglifyJS.parser // Parse input.js file and create AST
, fs = require('fs')
, filename = 'input.js';
var toplevel = UglifyJS.parse(String(fs.readFileSync(filename)));
var walker = new UglifyJS.TreeWalker(function(node){ //walk AST
var statement = JSON.parse(JSON.stringify(node));
if (node instanceof UglifyJS.AST_VarDef || node instanceof UglifyJS.AST_Constant)
{
var parentForIn = walker.find_parent(UglifyJS.AST_ForIn); //in order to avoid init vars in for..in loops
var parentLoopVariable ="";
if (parentForIn) {
parentLoopVariable = JSON.parse(JSON.stringify(parentForIn));
parentLoopVariable = parentLoopVariable["init"];
parentLoopVariable = parentLoopVariable["definitions"];
if (parentLoopVariable)
parentLoopVariable = parentLoopVariable[0].name["end"].value;
}
var parentFor = walker.find_parent(UglifyJS.AST_For); //in order to avoid init vars in for loops
if (parentFor) {
parentLoopVariable = JSON.parse(JSON.stringify(parentFor));
parentLoopVariable = parentLoopVariable["init"];
parentLoopVariable = parentLoopVariable["definitions"];
if (parentLoopVariable)
parentLoopVariable = parentLoopVariable[0].name["end"].value;
}
var expression = statement["name"];
if (expression) {
variableName = node.start.value
if(variableName && variableName.length < 3 && variableName !== parentLoopVariable)
{
addBadVariableName(node.start.line,variableName);
}
}
}
});
toplevel.walk(walker);
for (line in smallVariableNames)
console.log(smallVariableNames[line]);
幾句話,我們的腳本中,我們讀「input.js」文件,分析它,走到樹,發現所有這些小的變量。
好吧,現在我們有我們的腳本我們如何測試它! 我已將腳本保存到文件夾%UGLIFY-JS%/ test/ 安裝最快捷的方式(如果您有node.js和uglify.js)要在命令中運行: * node node_modules/uglify-js/test/smallVariables.js *
根據您的輸入文件,您將看到一些行號和小變量名稱。 通過這種方式,您可以放任何適合您需要的規則。 AST樹是一個非常強大的工具。
而且我已經找到真正有用下面的文章: http://lisperator.net/uglifyjs/walk
散步,看看[此線索](http://stackoverflow.com/questions/5827612/node-js-fs-readdir -recursive目錄搜索) – Roshambo