Answers:
Babel的阶段预设等同于TC39流程以及每种提案潜在语言更改的不同状态。它们包括该阶段中所有拟议变更的实现和填充。
目前在使用的Stage-0
是Strawman,而不是 ES6。它是未来的Javascript,而且绝对不确定是否会将其纳入任何正式的ECMAScript规范中。
请不要仅仅设置为stage-0
这样,否则它将在不了解其后果的情况下起作用。
仅包含ES6功能的Babel Preset是 preset-es2015
stage-0
但绝对不是绝对安全的(请参阅在阶段1之后撤回的Call构造函数建议)。但是除了阶段4(即完成阶段)以外的任何阶段都可以这样说。
preset-es2015
用babel-preset-node6
这些天来代替。
babel-preset-env
甚至更好,它可以针对任何环境!
babel-preset-env
INSTEAD OF babel-preset-es2015
。babel-preset-es2015
几乎过时
正如其他答案所详述。阶段4最稳定,阶段0最危险。这是对先前答案和文档的5个阶段的高层次细分。我添加此内容是因为当我谈到此时,我期望每个阶段的内容都有更高层次的分解:
准备包含在ECMAScript标准中,已通过测试,将成为下一修订版的一部分
包含完整的规范文本,并包含大多数经过测试并提供反馈的插件。解决方案已完成,所有进一步的更改均基于实施经验。
尽可能完成对插件的进一步支持。仅通过逐步更改,即可满足这些要求。语义和api有望完成。它很可能成为规范的一部分。
每个级别都是包容性的,而4包括3包括2等等,以此类推...我希望这一总结对将来的人有所帮助。
这些阶段代表了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预设
链接摘录:
阶段0-Strawman:一个想法,可能是Babel插件。
第1阶段-提案:值得继续努力。
第2阶段-草稿:初始规格。
第3阶段-候选:完整的规范和初始浏览器实施。
阶段4-完成:将添加到下一个年度版本
总体图片:
preset
在babel的术语中称为a 。每个预设都包含来自各种风险级别的插件。preset-0
这意味着它具有一些非常具有实验性的功能插件,因此很有可能使其最终规格不合格。就像开发人员想到Java应该具有特定功能的想法一样,他做了一些工作将其纳入TC-39提案流程。preset-1
它包含TC-39接受的功能构思的插件,他们认为值得进行研究。preset-2
为功能准备好初始草稿的功能插件。它继续..因此,可能发生的情况是,第0阶段的功能在一段时间内达到了第2阶段,并在以后的一段时间再出现在Javascript的下一版本中。
因此,对于这些Babel Presets的每个版本,您都可以在其中找到不同的插件集。也可能发生的是,阶段0中的某个功能经历了一些更改,并对其功能进行了重大更改。可以说,第2阶段使用了完全不同的API。因此,开发人员必须确保在更新这些插件时对他们的代码进行必要的更改。
最初的问题是“ 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,依此类推。
核心思想是“之上的思想”。我没有回答下半部分,因为上面的回答在那部分上非常好。
我知道了 你们可以参考https://babeljs.io/docs/plugins/preset-stage-0/
简而言之,preset-stage-0
包含所有具有的功能preset-stage-1
,并 preset-stage-1
包含所有具有的功能,preset-stage-2
依此类推...
低位数字更强大。在您的项目中,如果您不想麻烦任何问题,只需设置stage-0
...
stage-0
实际上是什么吗?由于您说的是“低位数字更强大。”,所以我相信不会。
stage
与混淆了ES6
,@ RGraham指出了 The Babel Preset which contains only ES6 features is preset-es2015
。谢谢!
babel-preset-stage-0
包括所有插件,范围从stage-0
到stage-3
。这意味着我要提出所有建议的功能,无论是否可以提出建议。
stage-1
呢 使用安全吗?stage-1
将来是否可以弃用某些功能并更改API?