JS 编译器通过 AST 解析,转换,再生成新代码等过程进行编译操作,笔记简单记一下使用 babel 的 ast 解析器 (babylon) 来动态生成新代码。

AST

Abstract Syntax Tree

简要说明:https://github.com/barretlee/babel-plugin-ast/blob/master/docs/babel-loader-ast.pdf

Demo

const babylon = require("babylon");
const traverse = require("babel-traverse").default;
const generate = require('babel-generator').default;

const code = `
  const abc = 1;
  let hello = 'world';
`;

const ast = babylon.parse(code);

traverse(ast, {
  enter(path) {
    if (path.node.type === 'Identifier') {
      path.node.name = path.node.name.split('').reverse().join('');
    }
  }
});

console.log(generate(ast).code);
// output:
// const cba = 1;
// let olleh = 'world';

References