【Babel】Babel的API-@babel/core

197 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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节点进行处理,处理分为 enterexit两个阶段,这两个阶段函数都有一个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;