抽象语法树手术:用 Node.js 编写 Babel 插件修改代码
学习利用 AST 工具(如 @babel/parser)分析 JavaScript 代码,并编写插件自动插入性能埋点或转换语法。 · 难度:入门 · +10XP
抽象语法树手术:用 Node.js 编写 Babel 插件修改代码
本教程将教你使用 Babel 的解析器、遍历器和生成器,编写自定义代码转换插件。你将实现一个自动给所有函数注入 console.time 的插件,以及一个将 CommonJS 转换为 ESM 的工具。深入理解 AST 节点类型(如 FunctionDeclaration、CallExpression),并掌握 visitor 模式。最终创建一个用于代码分析的 CLI 工具。
module.exports = function (api, options) {
return {
visitor: {
FunctionDeclaration(path) {
const body = path.node.body;
body.body.unshift(
api.types.expressionStatement(
api.types.callExpression(
api.types.memberExpression(
api.types.identifier('console'),
api.types.identifier('time')
),
[api.types.stringLiteral(path.node.id.name)]
)
)
);
}
}
};
};