实现一个简单的babel插件

本文介绍了Babel的作用,包括将代码编译成抽象语法树,使用@babel/parser解析,@babel/types操作AST,@babel/traverse遍历,以及@babel/generator生成转换后的代码。通过实例演示如何编写插件将input变量重命名。
摘要由CSDN通过智能技术生成

babel的作用

babel先将代码编译为AST抽象语法树,修改AST,生成转换后的代码

生成AST抽象语法树

npm包

npm install babel-cli @babel/parser @babel/types @babel/traverse @babel/generator

  • babel命令:babel-cli
  • 编译器:@babel/parser
  • transform:
    • @babel/types 对AST进行增删改查
    • @babel/traverse 对AST进行遍历
  • generator:@babel/generator 生成转换后的代码

实例

编写一个插件将代码中的变量input转换为input1

目录结构

在这里插入图片描述

源码

example1/index.js文件:

let input = [1, 2, 3] 
input = input.map(item => item + 1) 
console.log(input)
编写插件

我们先去生成AST的网站看一下这段代码的语法树,我们发现input的类型是Identifier
在这里插入图片描述
在visitor中增加Identifier函数,所有AST节点类型是Identifier都会走进来,接下来我们就能改变原有的值啦。
example1/plugin.js文件:

module.exports = function(e) {
    return {
        name: 'example-1',
        visitor: {
            Identifier(path, state) {
                if(path.node.name === 'input') {
                    path.node.name = 'input1'
                }
            }
        }
    }
}
配置插件

.babelrc文件中加入自己编写的插件

{ 
	"plugins": [
        "./example1/plugin"
    ] 
}
进行编译

package.json文件中加入命令,指定转换后的文件输出到example1/compiled.js

"scripts": {
    "example1": "babel ./example1/index.js --out-file ./example1/compiled.js "
}

npm run example1运行命令后,我们发现example1/compiled.js中的代码已经将变量input转换为input1了:

let input1 = [1, 2, 3];
input1 = input1.map(item => item + 1);
console.log(input1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值