私はuglifyjsも初めてです。これは素晴らしいライブラリだと思いますが、適切なドキュメントや例が不足しています。私が非常に優れていると思う uglifyjs の用途の 1 つは、静的分析ツールの作成です。そのため、私が作成した小さなスクリプトを共有したいと思います。これは、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