babel

babel是js的编译器

注意很重要的一点就是,Babel 只是转译新标准引入的语法,比如:

  • 箭头函数
  • let / const
  • 解构

哪些在 Babel 范围外?对于新标准引入的全局变量、部分原生对象新增的原型链上的方法,Babel 表示超纲了。

  • 全局变量
  • Promise
  • Symbol
  • WeakMap
  • Set
  • includes
  • generator 函数

对于上面的这些 API,Babel 是不会转译的,需要引入 polyfill 来解决,如:

// 安装babel-polyfill
"babel-polyfill": "^6.26.0",

// webpack.config.js
entry: {
    app: ['babel-polyfill', './src/main.js']
}

Babel 的编译过程和大多数其他语言的编译器相似,可以分为三个阶段:
解析(Parsing):将代码字符串解析成抽象语法树;
转换(Transformation):对抽象语法树进行转换操作;
生成(Code Generation): 根据变换后的抽象语法树再生成代码字符串;

一般来说,Parse 阶段可以细分为两个阶段:词法分析(Lexical Analysis, LA)和语法分析(Syntactic Analysis, SA)。

词法分析之后,代码就已经变成了一个 Tokens 数组了,现在需要通过语法分析把 Tokens 转化为上面提到的抽象语法树。

原文:https://www.cnblogs.com/yalong/p/11678566.html

https://segmentfault.com/a/1190000019578478

原文地址:https://www.cnblogs.com/xjy20170907/p/12731509.html