一、配置文件

几乎所有的前端工程师都知道可以用babel将es6+的语法转换为es5,转换工具要么使用babel-cli,要么使用webpack的babel-loader,不管使用哪种转换工具,通常都需要一个配置文件来建立转换规则(也可以在webpack的babel-loader的配置项,原理都一样)。

babel执行时默认从当前目录查找配置文件,支持的配置文件格式有:.babelrc,.babelrc.js,babel.config.js和package.json。它们的配置项都是相同,作用也是一样的,只需要选择其中一种,推荐使用.js结尾的文件,这样可以在配置文件中进行编程控制,如下:

module.exports = function (api) {api.cache(true);const presets = [ ... ];const plugins = [ ... ];return {presets,plugins};
} 

也可以直接使用module.exports = {},没有必要一定是一个function。

在编写配置文件中,最主要的就是设置plugins(插件)和presets(预设),每个插件或预设都是一个npm包,插件和预设会在编译过程中把我们的ES6+代码转换成ES5。

二、插件和预设的关系

babel中的插件太多,以es2015为例:

  • @babel/plugin-transform-arrow-functions
  • @babel/plugin-transform-block-scoped-functions
  • @babel/plugin-transform-block-scoping
  • ....

如果只采用插件的话,我们需要配置非常多的插件数组,如果项目使用了es2016又得增加一堆,而且我们压根也记不住哪个es版本里该使用哪些插件。

preset就是解决这个问题的,它是一系列插件的集合,以@babel/preset-env为例,假设项目中安装的npm包版本是2020年1月发布的,那么这个预设里包含了2020年1月以前所有进入到stage4阶段的语法转换插件。

可能有小伙伴会问,假如我设置了一个语法插件,指定某个预设里又包含了插件,此时会发生什么?这就涉及到插件和预设的执行顺序了,具体的规则如下:

  • 插件比预设先执行
  • 插件执行顺序是插件数组从前向后执行
  • 预设执行顺序是预设数组从后向前执行

三、插件和预设的参数

不配置参数的情况下,每个插件或预设都是数组中的一个字符串成员,例:preset:["@babel/preset-env","@babel/preset-react"],如果某个插件或预设需要配置参数,成员项就需要由字符串换成一个数组,数组的第一项是插件或预设的名称字符串,第二项为对象,该对象用来设置插件或预设的参数,格式如下:

  {"presets": [["@babel/preset-env",{"useBuiltIns": "entry"}]]}

四、插件和预设的简写

插件或可以在配置文件里用简写名称,如果插件的npm包名称的前缀为 babel-plugin-,可以省略前缀。例如"plugins": ["babel-plugin-transform-decorators-legacy"]可以简写为"plugins": ["transform-decorators-legacy"]。

如果npm包名称的前缀带有作用域@,例如@scope/babel-plugin-xxx,短名称可以写成@scope/xxx。

到babel7版本时,官方的插件大多采用@babel/plugin-xxx格式的,没有明确说明是否可以省略@babel/plugin-,遇到这中npm包时,最好还是采用全称写法比较稳妥。

预设的短名称规则跟插件差不多,前缀为babel-preset-或带有作用域的包@scope/babel-preset-xxx的可以省略掉babel-preset-。

babel7里@babel/preset-前缀开头的包,例如@babel/preset-env的短名称是@babel/env,官方并没有给出明确说明以@babel/preset-xxx卡头的包是否都可以采用简写,因此最好还是采用全称。

五、混乱的babel6预设

如果直接接触babel7的前端同事都知道es预设直接用@babel/preset-env就行了,但是如果要维护和迭代基于babel6的项目呢?各个项目中使用的可能都不一样,babel-preset-es20xx、babel-preset-stage-x、babel-preset-latest这些预设是啥意思?

babel-preset-es20xx: TC39每年发布的、进入标准的ES语法转换器预设,最后一个预设是babel-preset-es2017,不再更新。

babel-preset-stage-x: TC39每年草案阶段的ES语法转换器预设。x的值是0到3,babel7时已废弃,不再更新。

babel-preset-latest: TC39每年发布的、进入标准的ES语法转换器预设。在babel6时等于babel-preset-es2015、babel-preset-es2016、babel-preset-es2017。该包从 v2 开始,需要@babel/core@^7.0.0,也就是需要babel7才能使用,既然要升级到babel7,不如使用更加强大的@babel/preset-env。

babel-预设和插件相关推荐

  1. 可以直接在FCPX软件里加载管理预览使用LUTs调色预设的插件–LUT Gallery

    我们在网站上分享了很多LUTs调色预设,但是很多人不知道怎么在FCPX使用这些预设,今天就为大家介绍这款可以直接在FCPX软件里加载管理预览使用LUTs调色预设的插件–LUT Gallery.插件安装 ...

  2. Babel常用的插件

    Babel常用的插件 1. @babel-plugin-dynamic-import-node 作用:在开发环境下解决vue热加载编译速度慢的问题. 2. @babel/plugin-syntax-d ...

  3. sublime 插件安装;sublime的 babel、sublime-jsfmt插件

    前提: 在开发过程中,使用到es6语法,sublime不能够自动的识别代码,不能高亮等: babel是一个更好显示高亮,和代码格式的插件,并且 sublime-jsfmt让 更好: 安装sublime ...

  4. Koa2仿知乎服务端项目:Webpack配置

    项目简介 该项目为一个后端项目,该项目仿"知乎",模拟实现了: JWT用户认证.授权模块 上传图片模块 个人资料模块 关注与粉丝模块 话题模块 问题模块 答案模块 评论模块 共计4 ...

  5. html引入babel-polyfill,babel-polyfill

    babel-polyfill在Babel7以后名字是@babel/polyfill.在引入polyfill一节,我们学习了polyfill的入门知识,在本节将会深入讲解. polyfill广义上讲是为 ...

  6. 为什么我们删除Babel的舞台预设:实验性提案的明确选择加入

    by Henry Zhu 朱Henry 为什么我们删除Babel的舞台预设:实验性提案的明确选择加入 (Why We Removed Babel's Stage Presets: Explicit O ...

  7. ae字体预设下载_AE超强文字预设包(附插件和教程)Videohive 2D Text Preset Pack for Animation Composer Plug-in...

    [预设介绍] 一套非常强大的文字动画预设包,作者还为这套强大的预设制作了Animation Composer独立控制插件, 能够更好的使用预设,预设超过1000种,能用于转场和特效中, 在插件中直接使 ...

  8. FCPX插件:LUT Gallery for mac(LUTS调色预设预览管理)及安装教程

    LUT Gallery是一个LUTS调色预设预览管理插件,可以在FCPX中直接预览选择需要的LUTS预设,以文件夹的形式整理管理预设,选择应用预设并调节预设的浓度.包含一个白平衡插件,配合使用可以调节 ...

  9. babel 插件为react元素自动添加属性

    原文链接: babel 插件为react元素自动添加属性 上一篇: clip-path 绘制css常见图形 制作有趣的动画 下一篇: js 生成器 协程 参考 https://www.imliyan. ...

  10. FCPX插件:直线图形矩形线条路径动画预设

    本次小编为您带来直线图形矩形线条路径动画预设,这是一套适用于Final Cut Pro的字幕插件.线条路径动画预设 Mac插件包含了直线,波浪线,三角形,矩形,圆形,八角形以及环线等多种形状.直线图形 ...

最新文章

  1. 中国人工智能学会通讯——人工智能如何造福人类 1.1 人工智能是中性技术
  2. 使用 Visual C# .NET 生成 Office COM 外接程序
  3. java web登录action_JavaWeb中登陆功能
  4. 使用盒子模型仿照优酷的页面片段
  5. python pyquery倒数第二个节点之前的节点_Python中PyQuery库的使用总结
  6. HiJson工具 火狐浏览器中的jsonHandle插件(以及乱码问题的解决)--来转换json串的格式
  7. 史上最简单的 Nginx 教程,没有之一!
  8. GY-53红外激光测距模块的使用以及pwm模式代码的实现
  9. 服务器 python cant open file_QQ炫舞转服系统-QQ炫舞官方网站-腾讯游戏
  10. Windows 10出现0x8000ffff错误应该如何解决?
  11. 手淘双11最新实践:PopLayer弹层领域研发模式升级
  12. unity 暂停按钮_Unity VideoPlayer教程之 视频播放暂停切换
  13. Python3+Scrapy通过代理爬取携程酒店数据
  14. SuperMap iClient for MapboxGL 实现WFS查询功能
  15. 计算机毕业设计JSPMjava平台购物系统
  16. flutter 微信聊天输入框
  17. 基于nrf52832的vl53l1激光人体感应器设计
  18. Python经典编程习题100例:第11例:古典兔子问题
  19. springboot整合ueditor上传图片配置(JSP)从新建项目开始
  20. matlab时域信号如何分析方法,信号时域采样频谱分析(matlab)

热门文章

  1. 漏洞复现:通过CVE-2022-30190上线CS
  2. 【算法学习笔记六】递归之归纳法
  3. html字体颜色渐变
  4. 虚拟机怎么架设dns服务器,虚拟机centos7 DNS服务器搭建
  5. TiDB 在北京银行交易场景中的应用实践
  6. 多任务学习——【ICML 2018】GradNorm
  7. KVM移植之ITRON版
  8. 字节辟谣被裁员工与 HR 互殴;苹果头显多个新功能曝光;谷歌希望 RISC-V 成为 T1 级 Android 架构|极客头条
  9. 蘑菇街Java后台面试总结
  10. JSteg信息隐藏算法