babel-preset-stage-0,babel-preset-stage-1等有什么区别?


126

我的问题是:是什么区别babel-preset-stage-0babel-preset-stage-1babel-preset-stage-2babel-preset-stage-3,什么时候,我们用发展的最佳选择ES6

Answers:


97

Babel的阶段预设等同于TC39流程以及每种提案潜在语言更改的不同状态。它们包括该阶段中所有拟议变更的实现和填充。

目前在使用的Stage-0是Strawman,而不是 ES6。它是未来的Javascript,而且绝对不确定是否会将其纳入任何正式的ECMAScript规范中。

请不要仅仅设置为stage-0这样,否则它将在不了解其后果的情况下起作用。

仅包含ES6功能的Babel Preset是 preset-es2015


3
stage-1呢 使用安全吗?stage-1将来是否可以弃用某些功能并更改API?
notgiorgi

4
@notgiorgi 比更改甚至完全弃用更安全stage-0但绝对不是绝对安全的(请参阅在阶段1之后撤回的Call构造函数建议)。但是除了阶段4(即完成阶段)以外的任何阶段都可以这样说。
CodingIntrigue '16

如果运行Node 6或更高版本,则可能需要preset-es2015babel-preset-node6这些天来代替。
戴夫·萨格

5
babel-preset-env甚至更好,它可以针对任何环境!
CodingIntrigue

5
Guyz请使用babel-preset-envINSTEAD OF babel-preset-es2015babel-preset-es2015几乎过时
维杰-

53

正如其他答案所详述。阶段4最稳定,阶段0最危险。这是对先前答案和文档的5个阶段的高层次细分。我添加此内容是因为当我谈到此时,我期望每个阶段的内容都有更高层次的分解:


阶段4:完成

准备包含在ECMAScript标准中,已通过测试,将成为下一修订版的一部分


第三阶段:候选人

包含完整的规范文本,并包含大多数经过测试并提供反馈的插件。解决方案已完成,所有进一步的更改均基于实施经验。


阶段2:草稿

尽可能完成对插件的进一步支持。仅通过逐步更改,即可满足这些要求。语义和api有望完成。它很可能成为规范的一部分。


阶段1:提案 在此阶段已发现并选择要研究的概念,大多数情况下都希望使用poly-fills和demos。


阶段0:稻草人 这个名字使我根据TC-39笑起来,虽然没有任何限制,但是鉴于上下文,它是尚未被选择进行跟进或研究的概念的类别。

每个级别都是包容性的,而4包括3包括2等等,以此类推...我希望这一总结对将来的人有所帮助。


15

这些阶段代表了TC39流程所定义的阶段,这些阶段的功能从疯狂但有用的想法到公认的标准(例如ES6)。这个过程需要一些时间,因为必须讨论,考虑,测试,充填,讨论更多内容等,这是一个标准主体。目的是说“ ES6”将具有完整和完整的含义,就像说“ ES5”一样。

在实践中,您的项目要求范围可能从停留到尝试和真实,再到使用非常方便(如果含糊)的语言功能。您可能想从以下链接开始:

  • TC39流程概述:其中包括一个精巧的图表,说明各个阶段的含义以及各个阶段的功能如何发展。下面是TC39的概述。

  • 活动的提议:某些提议处于哪个阶段的快速概述。它还包括指向完成,不活动和阶段0提议的链接。今天,即2017年4月,公共类别字段处于第2阶段,这意味着已对其进行了精确描述,并且已分配了审阅者,但尚未进行全面审阅。

  • 第3阶段的Babel预设软件包:所有第3阶段提案的插件页面,带有指向Git和NPM的链接。基本上,此插件可以提取软件包的集合,从理论上讲,该集合可以填充TC39阶段3中的当前建议。实际上,可能会发生错误。此外,您可以找到类似的类似内容,它链接到Stage 2及以下的插件页面。这些页面将链接到包含第3阶段提案和不稳定提案的软件包。

  • Babel预设'env':此Babel预设支持完整的建议,选择在已知环境中支持这些功能所需的正确软件包。例如,本地node可执行文件比旧版浏览器需要更少的插件。可以考虑支持已批准的未来功能的“ stage-4”插件。

总之,如果使用这些预发行功能,则只需要使用它们即可。如果确实需要使用它们,请选择具有所需条件的最大数量的舞台。如果您只是想要一个带有疯狂功能的玩具装置来讨论水冷却器,请继续并获取阶段0。


谢谢,所以babel-env是一种babel要求的配置
Webwoman

4

这是了解的最佳起点。什么是Babel预设

链接摘录:

阶段0-Strawman:一个想法,可能是Babel插件。
第1阶段-提案:值得继续努力。
第2阶段-草稿:初始规格。
第3阶段-候选:完整的规范和初始浏览器实施。
阶段4-完成:将添加到下一个年度版本

总体图片

  1. 随着时间的流逝,JavaScript不断发展,并且越来越多的功能被添加到该语言中。
  2. 浏览器还必须做很多工作,以便它们能够实现这些新功能,以供他们理解。通常,此过程比Javascript的发展速度慢很多。
  3. 但是开发人员希望使用语言的新功能,因为它使他们更容易编写,理解和维护代码。
  4. 因此,开发人员使用新的Javascript功能来编写代码,但是在该代码到达浏览器之前,它经历了一个构建过程,在此过程中,使用一些魔术,所有具有新功能的代码都被转换为浏览器可以理解的代码。即JavaScript的新功能,但使用浏览器可理解的语言构造进行编码。
  5. 可以使用工具来执行构建魔术,其中之一就是Babel。
  6. Babel的工作方式是使用一组插件。这些插件中的每一个都可能涉及将Javscript的特定新功能转换为浏览器可理解的语言构造。
  7. 有数百个这样的插件,每个插件都引用Javascript的不同新功能。这些功能可能会也可能不会成为最终Javascript规范的一部分。而且,如果它最终没有达到最终的Javascript规范,则所有浏览器都不会实现此功能。因此,如果有任何开发人员使用babel插件使用JS的任何实验性功能,那么他/她正在冒险。如果它从未出现在规范中,那么在将其部署到浏览器之前,必须始终编译该部分代码。
  8. 将此风险分为各种级别,以表示任何功能达到最终规格的机会。
  9. babel还将这些插件分为不同的集合,preset在babel的术语中称为a 。每个预设都包含来自各种风险级别的插件。
  10. preset-0这意味着它具有一些非常具有实验性的功能插件,因此很有可能使其最终规格不合格。就像开发人员想到Java应该具有特定功能的想法一样,他做了一些工作将其纳入TC-39提案流程。
  11. preset-1 它包含TC-39接受的功能构思的插件,他们认为值得进行研究。
  12. preset-2为功能准备好初始草稿的功能插件。它继续..

因此,可能发生的情况是,第0阶段的功能在一段时间内达到了第2阶段,并在以后的一段时间再出现在Javascript的下一版本中。

因此,对于这些Babel Presets的每个版本,您都可以在其中找到不同的插件集。也可能发生的是,阶段0中的某个功能经历了一些更改,并对其功能进行了重大更改。可以说,第2阶段使用了完全不同的API。因此,开发人员必须确保在更新这些插件时对他们的代码进行必要的更改。


3

最初的问题是“ babel-preset-stage-0,babel-preset-stage-1,babel-preset-stage-2和babel-preset-stage-3之间有什么区别,奇怪的是,答案集中在“差异”上在TC39的阶段0,阶段1……术语之间进行投票,而唯一相关(尽管不准确)的则被否决。引用babel网站:

Babel预设是可共享的插件列表。

官方的Babel Stage预设跟踪了TC39过渡过程,以查找JavaScript中的新语法建议。

每个预设(例如Stage-3,stage-2等)都包含该特定阶段及其上方的所有插件。例如,阶段2包括阶段3,依此类推。

核心思想是“之上的思想”。我没有回答下半部分,因为上面的回答在那部分上非常好。


-20

我知道了 你们可以参考https://babeljs.io/docs/plugins/preset-stage-0/

简而言之,preset-stage-0包含所有具有的功能preset-stage-1,并 preset-stage-1包含所有具有的功能,preset-stage-2依此类推...

低位数字更强大。在您的项目中,如果您不想麻烦任何问题,只需设置stage-0...


15
但是您了解什么stage-0实际上是什么吗?由于您说的是“低位数字更强大。”,所以我相信不会。
Felix Kling

2
实际上,我将其stage与混淆了ES6,@ RGraham指出了 The Babel Preset which contains only ES6 features is preset-es2015。谢谢!
flyzl

如果您以后想要遇到问题,请使用Stage-0!Stage-0的某些或全部功能可能根本无法使其成为ES-spec。因此,请注意不要使用Stage-0功能。
devsnd

不知道为什么这个答案被否决了。他的话是对的。TC39阶段0基本上是非常不可信的建议。他们可能会也可能不会最终提案。但babel-preset-stage-0包括所有插件,范围从stage-0stage-3。这意味着我要提出所有建议的功能,无论是否可以提出建议。
Gaurav Kumar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.