Babel6

204 阅读2分钟

Babel6

核心包

PackageVersionUses
babel-corenpm以编程的方式使用babel
babylonnpm源码解析成AST
babel-traversenpm插件和预设通过这个遍历AST
babel-generatornpmAST转换生成成代码

babel-corebabel自身的编译器,它会导出 babel.transform方法,transformedCode = transform(src).code.

babel-core可以被拆分成如下三部分:

  • the parser: babylon
  • the transformer[s]: 所有插件和预设,都通过babel-traverse 遍历AST
  • the generator: babel-generator

流程如下:

input string -> babylon parser -> AST -> transformer[s] -> AST -> babel-generator -> output string

其他包

PackageVersionUses
babel-clinpm运行babel-core的CLI
babel-typesnpm校验、构建、改变AST节点
babel-polyfillnpmcore-js and regenerator-runtime的包装
core-js:一些polyfill
regenerator-runtime:主要用于编译和转换async functions
babel-runtimenpm生成不污染全局作用域的polyfill引入,参考handbook
babel-plugin-transform-runtime 一起使用
babel-registernpm绑定require hook到node的reqiure,在运行时自动编译文件
不适合用在生产
babel-templatenpm一个帮助函数,把sourcecode转成AST节点
babel-helpersnpm一些预制的babel-template函数
babel-code-framenpm生成和打印源码的错误

Presets

PackageVersionUses
babel-preset-es2015npmes6语法转换,不添加polyfill
babel-preset-es2016npm
babel-preset-es2017npm
babel-preset-latestnpm
babel-preset-stage-0npm
babel-preset-stage-1npm
babel-preset-stage-2npm
babel-preset-stage-3npm
babel-preset-reactnpm
babel-preset-envnpm根据环境目标,自动转换

babel-preset-env

A Babel preset that compiles ES2015+ down to ES5 by automatically determining the Babel plugins and polyfills you need based on your targeted browser or runtime environments.

TC39 将提案分为以下几个阶段:

  • Stage 0 - 设想(Strawman):只是一个想法,可能有 Babel插件。
  • Stage 1 - 建议(Proposal):这是值得跟进的。
  • Stage 2 - 草案(Draft):初始规范。
  • Stage 3 - 候选(Candidate):完成规范并在浏览器上初步实现。
  • Stage 4 - 完成(Finished):将添加到下一个年度版本发布中。

参考