babel-preset-react_babel-loader

babel-preset-react_babel-loaderhttps://www.fullstackreact.com/articles/what-are-babel-plugins-and-presets/当开发react或者vuejsapp时,开发者

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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来引用它。

<script
  src="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://javaforall.net/167519.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UAT 环境_系统uac

    UAT 环境_系统uacUserAcceptEnvironment用户仿真测试环境转载于:https://www.cnblogs.com/qinqiu/p/5981222.html

    2022年9月30日
    1
  • Wappalyzer 是一个Firefox插件,也是一个网站

    Wappalyzer 是一个Firefox插件,也是一个网站https wappalyzer com download nbsp Wappalyzer 是一个 Firefox 插件 也是一个网站 安装 Firefox 插件后 它会检查每个网站使用了哪些 Web 应用程序 目前共 67 种 包括博客引擎 CMS 电子商务程序 统计工具 主机控制面板 Wiki 系统和 JS 框架等等 检查结果会以图片方式显示在 Firefox 浏览状态栏右侧

    2025年6月10日
    1
  • TCP的拥塞控制(详解)「建议收藏」

    TCP的拥塞控制(详解)「建议收藏」在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做网络拥塞。在计算机网络中数位链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。当输入的负载到达一定程度吞吐量不会增加,即一部分网络资源会丢失掉,网络的吞吐量维持在其所能控制的最大值,转发节点的缓存不够大这造成分…

    2022年6月24日
    24
  • Chromedriver(谷歌浏览器驱动)安装教程「建议收藏」

    Chromedriver(谷歌浏览器驱动)安装教程「建议收藏」Python爬虫、数据分析、网站开发等案例教程视频免费在线观看https://space.bilibili.com/523606542Python学习交流群:1039649593最近很多朋友都在私信中问到我,下面这个报错应该怎么解决selenium.common.exceptions.WebDriverException:Message:’chromedriver’executableneedstobeinPATH.Pleaseseehttps://si

    2022年5月2日
    417
  • 【ProseMirror学习笔记 3 】—— schema

    【ProseMirror学习笔记 3 】—— schemaschemaschema介绍nodetypesContentExpressionstodogroupMarksAttributesSerializationandParsing   schema介绍每个Prosemirrordocument都有一个与之相关的schema.这个schema描述了document中的的nodes类型,和nodes们的嵌套关系.例如,schema可以规定,顶级节点可以包含一个或者更多的blo

    2022年9月12日
    0
  • 真封神2.5服务端关于不能转生问题解决办法

    真封神2.5服务端关于不能转生问题解决办法传说很久很久以前从ZFS4放出2.5的服务端以后很多人测试转生不了 因为被ZFS4个鸟人把转生的配置文件删除掉了  害的我曾经还使用反汇编改了一堆代码!伤心!现在我把这个配置文件补上给大家!已经会了的朋友不要藐视本人这里只给不会的人做下提示!更多教程请关注www.zfsyhg.com,感谢大家支持!感谢CSDN的支持!

    2022年7月24日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号