babel plugin
learn how to create babel plugin
babel 主要处理流程分为三步:
解析 parse
-> 转换 transform
-> 生成 generate
目前 babel 的三个步骤工作分别由:
@babel/parser
-> @babel-plugin
-> @babel/generator
目标
编写一个将 const 和 let 转化为 var 的 babel-plugin
准备工作
安装 @babel/parser
1 | yarn add @babel/parser @babel/traverse @babel/types |
施工 🚧
解析 JavaScript 字符
首先需要将 JavaScript 字符串转化为 AST(Abstract Syntax Tree
)
1 | const parse = require("@babel/parser").parse; |
这样就可以得到一颗 Abstract Syntax Tree
, parse 有很多 option , 有详细的文档供介绍.
得到的结果可以在本地打印,或者在 astexplorer.net进行查看.
通过观察树,可以发现 const a
这部分被定义为一个 variableDeclaration
Node.
而 const
let
var
之间的差距,就仅仅是 Node 的 kind
值的不同
修改
那么就是使用 @babel/traverse
插件匹配 variableDeclaration
, 然后修改 kind
的值就可以了.
1 | const ast = parse("const a = () => { return b}"); |
插件制作
新建一个文件 transform-to-var.js
1 | module.exports = function ({ types: t }) { |
安装 babel plugin 测试程序和测试框架
1 | yarn add babel-plugin-tester jest |
新建一个 transform-to-var.test.js
1 | const pluginTester = require("babel-plugin-tester").default; |
运行测试
1 | yarn jest |