let obj = {
name: 'javaScriptAST',
add: function (a, b) {
return a + b + 1000
},
mul: function (a, b) {
return a * b + 1000
}
}
将上面原始代码保存到demo.js文件中,注意,需要保存为utf-8编码的格式。另外新建一个文件,用来解析demo.js,AST解析转换代码的基本结构如下所示:
const fs = require('fs')
const parser = require('@babel/parser')
const traverse = require('@babel/traverse').default
const t = require('@babel/types')
const generator = require('@babel/generator').default
const jscode = fs.readFileSync('./demo.js', {
encoding: 'utf-8'
})
let ast = parser.parse(jscode) // 这里会将代码解析为一个AST树
let code = generator(ast).code // 在这里对AST进行一系列的操作
fs.writeFileSync('./demoNew.js', code, err => {}) // 输出转换AST后的数据
// let astJson = JSON.stringify(ast)
// fs.writeFileSync('./ast.json', astJson, err => {}) // 输出AST树数据
@babel/parser 用来将JS代码转换成AST,
@babel/traverse 用来遍历AST中的节点,
@babel/types 用来判断节点类型、生成新的节点等,
@babel/generator用来把AST转换成JS代码,
可以看出,AST处理JS文件的基本步骤为:首先读取JS文件,解析成AST,再对节点进行一系列的增、删、改、查操作,接着生成JS代码,最后保存到新文件中。