Babel-preset-stage-0和 babel-preset-stage-1等等之间的区别是什么?

我的问题是: babel-preset-stage-0babel-preset-stage-1babel-preset-stage-2babel-preset-stage-3之间的区别是什么? 当我们使用 ES6开发时,最好的选择是什么?

41482 次浏览

巴别塔的阶段预设相当于 TC39程序和每个提案的不同状态的一个潜在的语言变化。它们包括该阶段所有提议更改的实现和填充。

任何目前在 Stage-0是稻草人,没有 ES6。它是未来的 Javascript,绝对不能确定它是否会成为任何官方 ECMAScript 规范。

请不要 调到 stage-0,因此它将工作,而不了解的后果,这将有。

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

这些阶段表示 TC39流程定义的阶段,这些阶段将特性从疯狂但有用的想法转化为公认的标准,例如 ES6。这个过程需要一些时间,因为每个角落的情况都必须讨论,思考,测试,填充,更多的讨论等等。也就是说,它是一个标准机构。我们的目标是说“ ES6”将有一个完整和完整的意义,就像说“ ES5”一样。

在实践中,您的项目需求可能从保持到尝试和真实,到使用如此方便(如果模糊的话)的语言特性。你可能想从这些链接开始:

  • TC39流程概述 : 这包括一个漂亮的图表,说明各个阶段的含义以及各个阶段的特性如何进展。下面是 TC39的概述。

  • 主动提案 : 对某些提案所处阶段的简要概述。它还包括到完成的、非活动的和阶段0提案的链接。今天,2017年4月,公共课场处于第二阶段,这意味着它被精确地描述并且评审者已经被分配,但是没有被完全评审。

  • 第3阶段的 Babel 预设包 : 所有第3阶段提案的插件页面,包含 Git 和 NPM 的链接。基本上,这个插件拉入了包的集合,理论上,这些包填充了 TC39阶段3中的当前建议。实际上,可能会出现错误。同样,您可以找到类似的,它链接到 第二阶段及以下的插件页面。这些网页将链接到既包括第三阶段提案又包括不太稳定的提案的一揽子方案。

  • Babel Preset‘ env’ : 这个 Babel Preset 支持已完成的提案,选择在已知环境中支持这些特性所需的正确包。例如,一个本地 node可执行文件比一个旧的浏览器需要更少的插件。它可以被认为是“阶段4”插件,支持批准的未来功能。

总之,如果您使用这些预发布特性,那么您只需要处理它们。如果你确实需要使用它们,选择你需要的最多的舞台。如果你只是想要一个具有疯狂功能的玩具安装讨论周围的水冷却器,继续前进,并抓住阶段0。

正如其他答案所阐述的那样。第四阶段最稳定,第零阶段最危险。以下是前面答案和文档中的5个阶段的高级分解。我添加这个是因为当我开始写这篇文章的时候,我希望能够对每个阶段进行更高层次的分解:


第四阶段: 结束

已经准备好加入 ECMAScript 标准,已经通过测试,并将成为下一次修订的一部分


第三阶段: 候选人

包括一个完整的规格文本,并包括插件,大部分已经测试和提供反馈。解决方案已经完成,所有进一步的更改都基于实现经验。


第二阶段: 草稿

尽可能完成对插件的进一步支持。对这些需求的满足大部分都是通过不断增加的变更来实现的。语义和 api 应该是完整的。它很可能成为规范的一部分。


第一阶段: 建议 一个概念,已经发现和选择在这个阶段进行审查,主要是聚填充和演示预计。


第0阶段: 稻草人 根据 TC-39的说法,这个名字让我发笑,它似乎没有任何界限,但考虑到上下文,它是一个概念的分类,这些概念还没有被选出来进行跟进或检查。

每个级别是包括,而4包括3包括2等等... 我希望这个总结帮助某人在未来。

这是理解的最好起点

链接摘录如下:

阶段0-稻草人: 只是一个想法,可能巴别塔插件。
阶段1-建议: 这是值得努力的。
阶段2-草案: 初始规格。
阶段3-候选: 完整的规范和初始浏览器实现。
阶段4-完成: 将被添加到下一个年度发布

整体图片 :

  1. 随着时间的推移,Javascript 正在发展,越来越多的特性被添加到语言中。
  2. 浏览器还必须做大量的工作,以便他们能够实现这些新特性,使他们能够理解。这个过程通常比 Javascript 的发展速度慢得多。
  3. 但是开发人员希望使用语言的新特性,因为这使他们更容易编写、理解和维护代码。
  4. 所以开发人员使用新的 Javascript 特性来编写代码,但是在这些代码到达浏览器之前,需要经过一个构建过程,在这个过程中,使用一些魔法,所有具有新特性的代码都被传输到浏览器可以理解的代码中。例如 Javascript 的新特性,但使用浏览器可理解的语言结构进行编码。
  5. 构建魔法可以使用工具执行,其中之一是巴别塔。
  6. Babel 的工作方式是使用一组插件。这些插件中的每一个都可以指代将 Javscript 的一个特定的新特性转换为浏览器可理解的语言结构。
  7. 有数百个这样的插件,每一个都引用了 Javascript 不同的新特性。这些特性可能是也可能不是最终的 Javascript 规范的一部分。如果它最终没有进入最终的 Javascript 规范,那么没有一个浏览器会实现这个特性。因此,如果任何开发人员使用任何使用 babel 插件的 JS 实验性特性,这就是他/她正在承担的风险。如果它永远不会以 spec 结束,那么这部分代码在部署到浏览器之前总是必须进行转换。
  8. 这种风险被分为不同的级别,以表明任何特性达到最终规范的可能性。
  9. Babel 还将这些插件分组成不同的集合,在 babel 的术语中称为 preset。每个预置包含来自不同风险级别的插件。
  10. 这意味着它的插件的功能是非常实验性的,因此有很高的风险,使其成为最终规格。这就像一个开发人员想到 Javascript 应该有一个特殊的功能,他做了一些工作,使它到 TC-39提案过程。
  11. 它包含了 TC-39所接受的功能思想的插件,他们认为值得一试。
  12. preset-2插件的功能,其中一个初始草案的功能已经准备就绪。 然后继续。

所以可能发生的情况是,第0阶段中的一个特性在一段时间内到达了第2阶段,并且在更长的时间后在下一个 Javascript 版本中结束。

因此,在每个版本的 Babel Presets 中,你都可以找到不同的插件。也可能发生阶段0中的某个特性经历了一些更改,并对其功能进行了重大更改。而且它达到了,让我们说第二阶段与一个完全不同的 API。因此,开发人员必须确保在更新这些插件时对代码进行必要的修改。

最初的问题是“ babel-preset-stage-0,babel-preset-stage-1,babel-preset-stage-2和 babel-preset-stage-3之间的区别是什么?”。.术语“得到投票,而唯一相关的(虽然不准确)是下降投票。引自巴别塔网站:

Babel 预置是一个可共享的插件列表。

官方的巴别塔阶段预设跟踪 TC39阶段过程 JavaScript 中新的语法建议。

每个预置(例如,阶段3,阶段2,等等)包括所有的插件 那个特定的阶段和它上面的阶段。例如,第二阶段 包括第三阶段等等。

核心思想是“上面的人”。我不会回答后半部分,因为上面的答案在这一部分非常好。