直接上代碼
參考蔡老板星球文章
// 第一步
//文件模塊導入
const fs = require('fs');
//babel庫相關,解析到涂,轉換脊框,構建,生產(chǎn)
const parser = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const types = require("@babel/types");
const generator = require("@babel/generator").default;
// 第二步
//讀取文件
let encode_file = "./encode.js", decode_file = "./decode_result.js";
// 命令行操作讀取文件數(shù)據(jù)践啄,暫時可以不加
// if (process.argv.length > 2)
// {
// encode_file = process.argv[2];
// }
// if (process.argv.length > 3)
// {
// decode_file = process.argv[3];
// }
let jscode = fs.readFileSync(encode_file, {encoding: "utf-8"});
// 第三步
//轉換為ast樹
let ast = parser.parse(jscode);
console.log(ast)
// 第四步
const visitor =
{
//插件代碼
}
//調(diào)用插件浇雹,處理源代碼
traverse(ast,visitor);
// 第五步
//生成新的js code,并保存到文件中輸出
let {code} = generator(ast);
fs.writeFile('decode.js', code, (err)=>{});
傳送門
AST(抽象語法樹)的學習第一講——認識ast在線解析網(wǎng)站
http://www.reibang.com/p/6cccabe91228
AST(抽象語法樹)的學習第三講——ast分析常用節(jié)點及方法
http://www.reibang.com/p/7ccdfac7cf79
AST(抽象語法樹)的學習第四講——實戰(zhàn)ast
http://www.reibang.com/p/78405d38bb82