Babel-插件
第一个 Babel 插件
首先定义一个函数:
export default function(babel) {
// plugin contents
}
通常我们经常用到其中的types对象, 所以一般会直接解构出types来使用:
export default function({ types: t }) {
// plugin contents
}
然后你需要在函数中返回一个包含visitor的对象:
export default function({ types: t }) {
return {
visitor: {
// visitor contents
}
};
};
每个visitor都会接受两个参数: path以及state:
export default function({ types: t }) {
return {
visitor: {
Identifier(path, state) {},
ASTNodeTypeHere(path, state) {}
}
};
};
在每个visitor中添加你的逻辑即可. 比如下面这个简单的例子:
BinaryExpression(path) {
if (path.node.operator !== "===") {
return;
}
path.node.left = t.identifier("sebmck");
path.node.right = t.identifier("dork");
}
转换操作
遍历
获取子节点的路径.
需要访问一个节点的属性的时候, 可以通过path.node.property去访问:
// the BinaryExpression AST node has properties: `left`, `right`, `operator`
BinaryExpression(path) {
path.node.left;
path.node.right;
path.node.operator;
}
如果你需要访问path的属性, 则使用get方法去访问:
BinaryExpression(path) {
path.get('left');
}
Program(path) {
path.get('body.0');
}