Babel

Babel 是什么

  • 语法转换,一般是高级语言特性的降级
  • Polyfill (垫片/补丁) 特性的实现和接入
  • 源码转换,比如 JSX 等

在工程化的角度上,需要秉承以下理念:

  • 可插拔(Pluggable)
  • 可调试(Debuggable)
  • 基于协定(Compact)

编译是 Babel 的核心目标

自身的实现基于编译原理,深入AST(抽象语法树)来生成目标代码

Babel Monorepo 架构包解析

  • Babel 一些包的意义是在工程上起作用,对于业务来说是不透明的,比如一些插件可能被 Babel preset 预设机制打包对外输出。
  • Babel一些包是为了纯工程项目起作用,或者运行目标在 Node.js 环境中

@babel/cli是Babel提供的命令行

var babel = require("@babel/core")
babel.transform(code, options, function(err, result) {
result; // {code, map, ast}
})

@babel/core是Babel实现转换的核心

作为 @babel/cli 的关键依赖,@babel/core提供了基础的编译能力

@babel/standalone

  • 在浏览器中直接执行
  • Web IDE和智能化方向

image-20211229125911920

image-20211229131620956

@babel/preset-env是直接暴露给开发者在业务中运用的包能力

@babel/polyfill是core-js和regenerator-runtime两个包的结合

@babel/plugin-transform-runtime