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

fly*_*gzl 119 babel ecmascript-6

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

Cod*_*gue 94

Babel的阶段预设等同于TC39流程以及每个提案的不同状态,以便进行潜在的语言变更.它们包括该阶段所有建议更改的实现和polyfill.

目前的任何东西Stage-0都是稻草人,而不是 ES6.这是未来的Javascript,并且绝对不能确定它会成为任何官方的ECMAScript规范.

请不要只是这样设置,stage-0以便在不了解这将产生的后果的情况下工作.

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

  • @notgiorgi*比'stage-0`更安全*但绝不是完全安全的更改甚至完全弃用(参见[Call constructor proposal](https://github.com/tc39/ecma262/blob/master/workingdocs/callconstructor .md)在第1阶段后撤回.但是除了第4阶段(即完成)之外的任何阶段都可以这样说. (4认同)
  • 或者更好的是,[babel-preset-env`](https://github.com/babel/babel-preset-env)可以针对任何环境! (4认同)
  • Guyz请使用`babel-preset-env` INSTEAD OF`babel-preset-es2015` .`babel-preset-es2015`几乎已过时 (4认同)
  • 怎么样'stage-1`?使用安全吗?是否可以弃用某些"stage-1"功能并在将来更改API? (3认同)

Cal*_*lat 49

正如其他答案所阐述的那样.第4阶段是最稳定的,第0阶段是最危险的.以下答案和文档中的5个阶段的高级别细分.我正在添加这个,因为当我谈到这一点时,我期待每个阶段的更高级别细分:


第四阶段:完成

准备好包含在ECMAScript Standard中,已通过测试并将成为下一版本的一部分


第3阶段:候选人

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


第二阶段:草案

尽可能完成对插件的进一步支持.对这些要求的要求主要是在途中只有增量变化.语义和api预计将完成.它很可能成为规范的一部分.


第1阶段:提案 已经发现并选择在此阶段进行检查的概念,主要是聚合填充和演示.


阶段0:稻草人 这个名字让我轻笑,根据TC-39它没有任何形式的约束,但鉴于上下文它是未被选择被跟踪或检查的概念的类别.

每个级别都是包容性的,而4个包括3个包括2个等等...我希望这个总结可以帮助将来的某个人.


Cha*_*iam 15

这些阶段代表TC39流程定义的阶段,这些阶段将疯狂但有用的想法的特征运用到可接受的标准中,例如ES6.这个过程需要一些时间,因为每个角落的案例都必须进行讨论,思考,测试,填充,讨论等等.也就是说,它是一个标准组织.目标是说"ES6"将具有完整和完整的含义,就像说"ES5"一样.

在实践中,您的项目要求可能包括从保持到尝试和真实到玩耍,如此模糊,语言功能.您可能想要从这些链接开始:

  • TC39流程概述:这包括一个关于阶段意味着什么以及功能如何从阶段到阶段进展的漂亮图表.下面是TC39的概述.

  • 积极提案:快速概述某些提案所处的阶段.它还包括指向完成,非活动和阶段0提案的链接.今天,2017年4月,Public Class Fields处于第2阶段,这意味着它已被精确描述并且已经分配了审阅者,但未进行全面审核.

  • 第3阶段的Babel预设套餐:所有第3阶段提案的插件页面,包含Git和NPM的链接.基本上,这个插件引入了一系列软件包,理论上这些软件包填充了TC39第3阶段的当前提案.实际上,可能会出现错误.此外,您可以找到类似的类似,它链接到阶段2及以下的插件页面.这些页面将链接到包含第3阶段提案和不太稳定的提案的包.

  • Babel Preset'env':此Babel预设支持已完成的提案,选择在已知环境中支持这些功能所需的正确包.例如,本地node可执行文件比旧浏览器需要更少的插件.可以想到支持已批准的未来功能的'stage-4'插件.

总之,如果您使用它们,您只需要处理这些预发布功能.如果您确实需要使用它们,请选择具有您所需要的最高数量的舞台.如果您只是想要一个具有疯狂功能的玩具装置来讨论水冷却器,请继续前进并抓住第0阶段.


Gau*_*mar 5

这是理解的最佳起点。什么是 babel 预设

链接的摘录:

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

整体图

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

因此,可能会发生在 Stage 0 中的功能在一段时间后到达 Stage 2 并最终在一段时间后进入下一个 Javascript 版本的情况。

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