1. let obj = {
    2. name: 'javaScriptAST',
    3. add: function (a, b) {
    4. return a + b + 1000
    5. },
    6. mul: function (a, b) {
    7. return a * b + 1000
    8. }
    9. }

    将上面原始代码保存到demo.js文件中,注意,需要保存为utf-8编码的格式。另外新建一个文件,用来解析demo.js,AST解析转换代码的基本结构如下所示:

    1. const fs = require('fs')
    2. const parser = require('@babel/parser')
    3. const traverse = require('@babel/traverse').default
    4. const t = require('@babel/types')
    5. const generator = require('@babel/generator').default
    6. const jscode = fs.readFileSync('./demo.js', {
    7. encoding: 'utf-8'
    8. })
    9. let ast = parser.parse(jscode) // 这里会将代码解析为一个AST树
    10. let code = generator(ast).code // 在这里对AST进行一系列的操作
    11. fs.writeFileSync('./demoNew.js', code, err => {}) // 输出转换AST后的数据
    12. // let astJson = JSON.stringify(ast)
    13. // 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代码,最后保存到新文件中。