https://www.fullstackreact.com/articles/what-are-babel-plugins-and-presets/

当开发react或者vuejs app时,开发者可能经常需要在不同的babel configuration(.bablerc)中切换。你应该在package.json文件中见到过以下代码:

// package.json
{"babel": {"presets": ["es2015","stage-0"]}
}

或者在.babelrc文件中,可能看到下面的东西:

// .babelrc
{"plugins": ["transform-class-properties"]
}

本文,我们就好好说道说道这个stage-x是个啥,以及为什么我们这样来配置babel,也就是说我们将探讨babel plugins和presets.

什么是Babel?

为了理解为什么会出现Babel,我们就需要了解一下javascript的历史了。。。

ES5,ES6,ES7

我们知道javascript是web语言,她在不同浏览器中运行,比如chrome,firefox,safari,edge,ie等。不同的浏览器会有不同的javascript解释器,js就由这些解释器引擎翻译和运行。由于js被internet界广泛接受,应用越来越多,随后就有了规范组织用于管理js语言本身的规范。js所遵循的sepec就称为ecmascript或者ES

其中的第5版被称为ES5.你可以将ES5想象为js语言本身的一个版本,该版本在2009年定稿,目前主流浏览器全部实现了ES5.

而第6个版本被称为ES6,最终在2015年定稿,目前主流浏览器大都还没有支持其功能。

ES7则是基于ES6做了更多的改进,最新版本于2016年初步定稿,ES7只有两个新的功能.

作为js的未来,我们希望直接在今天就开始使用ES6/ES7,但是我们也希望我们的代码能够在目前的主流浏览器中能够正确地运行,这就是Babel为什么能够产生地原因。(除了babel, typescript也可以实现类似地功能)babel允许我们完全以ES6/ES7规范来写js代码,同时编译成es5地代码,以便最终可以在当前并未实现es6规范的浏览器上运行

使用babel

在项目中,我们可以以几种方式来使用babel.最简单和快捷的方式是使用一个package babel-standalone.你可以通过一个script tag来引用它。

<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.18.1/babel.min.js"
></script>

引入babel以后,babel就会自动将任何以text/babel为type的script进行stranpile

<div id="output"></div><script type="text/babel">
const getMessage = () => "Hello World"; // ES6!
document.getElementById('output').innerHTML = getMessage();
</script>

像create-react-app这样的项目会自动地引用并且配置好babel,因此你可以0配置开始写react components

Babel Plugins和presets

babel提供了一种开放的架构,通过plugin来对不同的feature做transformation.由于feature特别多,那么就会对应着bable plugin特别多,如何管理好这些plugin也是一个挑战。

在babel中,a preset is a set of plugins used to support particular language features.

Presets are sharable .babelrc configs or simply an array of babel plugins.

有两个preset会被babel默认使用:

es2015: 增加对ES2015功能地支持

react: 支持JSX

记住:ES2015仅仅是ES6的另外一种叫法,我们使用ES2015 preset因为我们不会使用ES7的新功能

除了ES7,js features可以在不同的stages中存在。一个feature可以是一种experimental proposal(实验性质)的,也就是说社区还在就一些细节进行研究(stage1).

experimental proposals有非常大的风险会被舍弃或者大幅修改。一个feature也可能是ratified状态的(批准),将会被在下一个js的release中包含("stage4")

具体地:

TC39工作组将proposals分门别类为以下stages:

  • stage-0 - Strawman: just an idea, possible Babel plugin.
  • stage-1 - Proposal: this is worth working on.
  • stage-2 - Draft: initial spec.
  • stage-3 - Candidate: complete spec and initial browser implementations.
  • stage-4 - Finished: will be added to the next yearly release.

我们可以通过使用presets或/和 plugins配置babel来尝鲜或者使用这些即将到来的或者说实验性质的功能.

哪些plugins或者presets是"safe"的?

babel会针对那些早于stage-3的feature做出警告,因为他们可能会被废弃或者大幅修改。特别是如果你从事教育工作,最好不要教授那些feature,因为很有可能会舍弃

如何使用babel plugin和presets

有两种主要的配置babel方式。

  1. 在package.json文件中

你可以像下面的package.json文件一样罗列出对应的presets和plugins列表:

// package.json
{"babel": {      // nest config under "babel""presets": ["es2015","react","stage-3"],"plugins": ["transform-class-properties"]}
}

    2..babelrc

// .babelrc
{"presets": ["es2015","react","stage-3"],"plugins": ["transform-class-properties"]
}

一般比较推荐通过.babelrc方式来配置babel

转载于:https://www.cnblogs.com/kidsitcn/p/11487666.html

babel plugin和presets是什么,怎么用?相关推荐

  1. Babel:plugin、preset的区别与使用

    文章概览 本文主要内容包括:什么是Babel Plugin.Babel Preset,两者的区别与联系.如何使用plugin/preset.如何创建自定义preset.使用注意事项. 本文所有例子可在 ...

  2. 如何写好.babelrc?Babel的presets和plugins配置解析

    什么是Babel The compiler for writing next generation JavaScript. 官网是这么说的,翻译一下就是下一代JavaScript 语法的编译器. 作为 ...

  3. 【转】如何写好.babelrc?Babel的presets和plugins配置解析

    什么是Babel The compiler for writing next generation JavaScript. 官网是这么说的,翻译一下就是下一代JavaScript 语法的编译器. 作为 ...

  4. 深入浅出 Babel 下篇:既生 Plugin 何生 Macros

    接着上篇文章: <深入浅出 Babel 上篇:架构和原理 + 实战 ????> 欢迎转载,让更多人看到我的文章,转载请注明出处 这篇文章干货不少于上篇文章,这篇我们深入讨论一下宏这个玩意  ...

  5. Babel配置中的presets、plugins、各个阶段stage的含义

    什么是Babel Babel 官方文档: https://babeljs.io/ Babel 中文文档:https://www.babeljs.cn/ 我们知道各个浏览器对JavaScript版本的支 ...

  6. babel6 babel7_当您已经准备好Babel时设置Flow

    babel6 babel7 by Jamie Kyle 杰米·凯尔(Jamie Kyle) 当您已经准备好Babel时设置Flow (Setting up Flow when you've alrea ...

  7. 新的一年babel了解一下

    参考文档 Babel 插件手册 Babel的作用 Babel是一个JavaScript编译器 很多浏览器目前还不支持ES6的代码,Babel的作用就是把浏览器不资辞的代码编译成资辞的代码. 注意很重要 ...

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

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

  9. 理解前端Babel编译原理

    大厂技术  坚持周更  精选好文 背景 我们知道编程语言主要分为「编译型语言」和「解释型语言」,编译型语言是在代码运行前编译器将编程语言转换成机器语言,运行时不需要重新翻译,直接使用编译的结果就行了. ...

最新文章

  1. 企业网络推广——企业网络有推广专员如何做好基本的网站优化布局
  2. Android Scroller完全解析,关于Scroller你所需知道的一切
  3. 玩转ECS第7讲 | ECS数据保护-数据备份新特性与最佳实践
  4. python入门经典书籍知乎_知乎问题回答 - 《Python100天从新手到大师》 - 开源书籍(oscbook.com)...
  5. java 图片导出_java导出含图片的word
  6. 和菜鸟一起学linux之DBUS基础学习记录
  7. 搞怪放屁微信小程序源码-无需服务器即可搭建
  8. CSS基础「一」基础选择器 / 字体属性 / 文本属性 / 三种样式表
  9. java中常见数据库字段类型与java.sql.Types的对应
  10. iphone用计算机显示器,如何将iPhone屏幕投射到电脑上
  11. 有限元分析类毕业论文文献(推荐10篇)
  12. Resource compilation failed. Check logs for details.
  13. 什么是PON光模块?PON光模块有哪些作用和类型?
  14. 《Web安全之机器学习入门》笔记:第十五章 15.7与15.8 TensorFlow识别垃圾邮件
  15. JS基础学习--第一周
  16. 2020美团笔试题目:送餐小区数量
  17. csv反序列化_对象的反序列化
  18. 云服务器和域名的购买—华为云
  19. spring切面接口ResponseBodyAdvice的分析和使用
  20. html3D效果可以在手机打开吗,HTML手机怎么打开

热门文章

  1. 【编程人生】完美的工作需要失误,从失误到人生,从改变到宇宙定律
  2. Android权限说明大全及动态获取权限框架——Easypermissions
  3. 网上书城系统的设计与实现
  4. Redis AOF重写阻塞因素
  5. ubuntu 寝室拨号上网以及在家上网
  6. python编程遍历_遍历数组
  7. 彩虹代shua网手机商城系统模板源码
  8. 控件重叠 关于WS_CLIPCHILDREN和WS_CLIPSIBLINGS的理解(个人认为还是相当全面的)
  9. 支付宝9亿红包分钱了,你拿了多少钱?有人领到18888元吗?
  10. 手把手带你重现菌群封面文章全部结果图表