编译器 Babel 的概念

很多人在配置Babel的时候总会出现配了这里丢了那里,这个很常见的问题往往是因为对Babel的基本概念缺乏整体性的了解,把Babel当作一个黑盒在使用。本文着重讲解Babel一系列的概念,意在为 Babel 的配置打下良好的基础。

目录

Babel的作用

Syntax / Feature

plugin / preset / env


Babel的作用

babel是一种特殊的编译器,它的原语言是JS目标语言也是JS,主要用于将高版本的JS代码编译成低版本的JS代码,这一需求的诞生是因为高版本的代码有编写效率更高,更易读,更规范等特点,而低版本的JS代码拥有更好的兼容性,能覆盖更广泛的用户群体等优势。虽然Babel能做的事情远不止这一件,但是它是Babel存在的最核心原因。 

babel能做的事情

  • 语法转换
  • polyfill(在老环境实现新的API)
  • 修改源码

Syntax / Feature

Syntax

Syntax即语法,语言级别中某一概念的写法,不可被语言中的任何其他概念实现, 这是一个很基础的概念。相当于数学中的公理,如平行线永不相交、圆周率等,是其他推论的基础不可以再被重新定义。在程序中就比如ES6的箭头函数、class、解构赋值等

Feature

与Syntax对应的语言中可以被开发者自己实现的部分就是feature,比如一些实例方法、静态方法、全局对象等,

plugin / preset / env

plugin

和很多其他构建工具一样Babel也是插件化的,Babel本身不会对代码进行任何操作,所有功能都靠插件实现。

常见插件:

  • @babel/plugin-transform-arrow-functions
  • @babel/plugin-transform-destructuring
  • @babel/plugin-transform-classes
  • 更多:可以在plugin list 中查看全部插件列表及使用方式

preset

Babel官方提供的预设,是一组插件的组合,让开发者不用一个一个插件的去配置,可以大大节省开发者的配置时间。比如在开发React或者TS项目的时候就可以直接使用官方提供的相关预设。

  • @babel/preset-env
  • @babel/preset-react
  • @babel/preset-typescript
  • @babel/preset-flow
  • 各个preset的用途与使用方式见 Babel Preset

说到preset顺带提一下ECMAScript新特性的诞生过程,ECMAScript语言新特性的提案,在TC39委员会会经历5个阶段后才会被正式发布,以前Babel会为前四个阶段的未成熟特性提供专门的preset,但是在Babel V7中就已经废弃了,Babel建议这些不稳定的特性单独的用plugin去解决,如果你的项目中还沉积着这些preset可以用babel-upgrade进行升级

TC39提案的5个阶段:

  • Stage 0-提案刚提出的时候,可能仅仅是个想法
  • Stage 1-大家发现这是个值得去实现的提案
  • Stage 2-草稿阶段:形成了最初的规范文档
  • Stage 3-候选人阶段:拥有了完整的规范文档和初步的浏览器实现
  • Stage4- 结束阶段,明年会正式发布

env

Babel的配置让人头大,虽然preset的出现很大程度上减轻了配置的负担,但是我们任然要关系用户的浏览器能不能支持某一特性的问题,为了解决这个问题env诞生了。

@babel/preset-env是一种更加智能的preset。让开发者只需要配置目标环境,preset-env会根据指定目标环境生成相关的plugin配置列表传递给Babel。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值