携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情
@babel/parser
、@babel/traverse
、@babel/generaotr
、@babel/types
、@babel/template
、@babel/code-frame
这些包各自有着各自特定的功能:
包名 | 功能 |
---|---|
@babel/parser | 解析源码,得到AST,通过指定options参数的plugins属性和sourceType属性可以指定parse语法的方式。 |
@babel/traverse | 遍历AST,并在遍历过程中使用visitor函数对指定的AST节点进行处理,处理分为 enter 和exit 两个阶段,这两个阶段函数都有一个path参数和一个state参数,path参数有着与当前节点相关的信息和具体操作AST节点的API,而state参数则是在遍历过程中起到传递一些数据的作用。 |
@babel/types | 用于创建和判断AST节点 |
@babel/template | 用于批量创建AST节点 |
@babel/code-frame | 用于创建友好的报错提示 |
@babel/generator | 用于将AST打印成我们想要的目标代码字符串 |
除了上面的这些包以外,还有一个 @babel/core
是用来基于上面的包来完成babel的整个编译流程的,毕竟我们不可能自己手动调用 @babel/parser
去将代码转成AST,然后再手动去调用 @babel/traverse
遍历AST,最后再调用 @babel/generator
去生成我们所想要的代码,这样的话太过于繁琐。
因此我们可以将上面的一整个完整的编译流程,从源代码到我们想要的目标字符串代码,同时生成sourceMap以及实现plugin和preset的调用这些都封装进 @babel/core
中,这个包提供的API有如下几个:
transformSync(code,options)
:从源代码开始处理,最终生成目标代码和sourceMap;transformFileSync(filename,options)
:从源代码文件开始处理,最终生成目标代码和sourceMap;transformFromAstSync(ast,sourceCode,options)
:从源代码AST开始处理,最终生成目标代码和sourceMap;
上面的三个API的options参数主要是用来配置plugins和presets,来指定具体要做些什么样的转换; 上面的三个API都有异步版本,会异步的进行编译,最后返回一个promise;