携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
Babel的介绍
定位:JavaScript转译器
Babel 是一个工具链,主要用于将采用 ECMAScript 2015+ 语法编写的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。
用途
- 转译某种版本的js到目标环境(宿主环境)支持的js;
通俗的讲就是js的版本转换,将代码中的一些新的语法,转换成基于目标环境支持的语法的实现,并且还可以把目标环境不支持的api进行polyfill。
polyfill:指的是一个代码块。这个代码块向开发者提供了一种可以让浏览器提供原始支持,抹平不同浏览器对API兼容性的差异。
polyfill又成为“腻子脚本”,我们可以把浏览器对API的兼容性差异看作是墙上的一个个坑洞,而polyfill就像是腻子一样,可以填补这些坑洞,因此前面用的抹平这个词很形象。
- 一些特定用途的代码转换;
通过babel的一些api,可以完成代码到AST(抽象语法树)的解析、转换以及目标代码生成。除此之外,我们还可以用它来完成一些特定用途的转换:
- 函数插桩(函数中自动插入一些代码,比如说埋点);
- 自动国际化;
- 源码转换(codemods);
- 等等...
- 代码的静态分析;
Babel的一些api可以完成代码到AST的转换,而通过AST的结构可以理解代码。理解代码之后我们可以分析代码,对代码进行一些检查,其中就可能涉及到下面的这些静态工具:
- Linter:分析AST结构,对代码规范进行检查;
- Api文档自动生成工具:提取源码中的注释,生成文档;
- JS解释器:直接解释执行AST;
编译器(Compiler)和转译器(Transpiler)
编译:从一种编程语言转换成另外一种编程语言。 主要指的是从高级语言转换到低级语言。
-
高级语言有着更强的表达能力,对于人类而言,高级语言要比低级语言具有更高的可读性。低级语言更加接近底层,它与硬件和执行细节有关,比如说汇编、机器语言等。
-
高级语言要先编译成可以被计算机识别的低级语言,然后才能执行,因此高级语言代码的执行速度一般不及低级语言的。
-
高级语言转换成低级语言的过程叫做编译,而编译过程中使用到的工具称之为编译器。除了从高级语言转换成低级语言,有些高级语言之间也可以相互转换,这个时候使用到的高级语言转换成另一种高级语言的工具叫做“转换编译器”,因此也被成为“转译器”。