【发布时间】:2016-09-12 02:28:43
【问题描述】:
我的问题是:babel-preset-stage-0,babel-preset-stage-1,babel-preset-stage-2 和babel-preset-stage-3 有什么区别,我们用ES6 开发时最好的选择是什么?
【问题讨论】:
标签: ecmascript-6 babeljs
我的问题是:babel-preset-stage-0,babel-preset-stage-1,babel-preset-stage-2 和babel-preset-stage-3 有什么区别,我们用ES6 开发时最好的选择是什么?
【问题讨论】:
标签: ecmascript-6 babeljs
这是理解的最佳起点。 What are babel presets
链接摘录:
第 0 阶段 - Strawman:只是一个想法,可能是 Babel 插件。
第 1 阶段 - 提案:这是值得努力的。
第 2 阶段 - 草案:初始规范。
第 3 阶段 - 候选:完整的规范和初始浏览器实现。
第 4 阶段 - 完成:将添加到下一个年度版本中
全图:
preset。每个预设都包含来自不同风险级别的插件。preset-0 这意味着它具有非常实验性的功能插件,因此很有可能使其成为最终规范。就像开发人员想到 Javascript 应该具有特定功能一样,他做了一些工作以使其进入 TC-39 提案流程。 preset-1 它包含 TC-39 接受的功能想法的插件,他们认为值得继续努力。preset-2 为功能准备好初始草稿的功能插件。
它还在继续……因此,第 0 阶段中的某个功能可能会在一段时间后到达第 2 阶段,并最终在一段时间后出现在 Javascript 的下一个版本中。
因此,对于这些 Babel 预设的每个版本,您都可以在其中找到不同的插件集。也可能发生在阶段 0 中的某个功能经历了一些更改,并对它的功能进行了重大更改。它达到了,可以说是使用完全不同的 API 的第 2 阶段。因此,开发人员必须确保在更新这些插件时对代码进行必要的更改。
【讨论】:
原来的问题是“babel-preset-stage-0,babel-preset-stage-1,babel-preset-stage-2 和 babel-preset-stage-3 有什么区别”,答案很奇怪关于“TC39 stage-0,stage-1.. terminology 之间的差异”获得投票,而唯一相关的(虽然不准确)被否决。引用 babel 网站:
Babel 预设是一个可共享的插件列表。
官方 Babel Stage 预设跟踪了 TC39 暂存过程 JavaScript 中的新语法建议。
每个预设(例如 stage-3、stage-2 等)都包含所有插件 那个特定的阶段和它上面的那些。例如,第 2 阶段 包括第 3 阶段,依此类推。
核心思想是“它之上的那些”。我不回答后半部分,因为上面的答案在那部分非常好。
【讨论】:
正如其他答案所阐述的那样。第 4 阶段最稳定,第 0 阶段最危险。以下是先前答案和文档中 5 个阶段的高级别细分。我之所以添加这个,是因为当我谈到这个时,我期待对每个阶段进行更高级的分解:
已准备好纳入 ECMAScript 标准,已通过测试并将成为下一个修订版的一部分
包含完整的规范文本,并包含大部分经过测试并提供反馈的插件。解决方案已完成,所有进一步的更改都基于实施经验。
尽可能完成对插件的进一步支持。对这些要求的满足大多只在途中进行增量更改。语义和 api 预计将完成。它很可能会成为规范的一部分。
每个级别都是包容性的,而 4 包括 3 包括 2 等等......我希望这个总结对未来的人有所帮助。
【讨论】:
这些阶段代表 TC39 流程定义的阶段,该流程将功能从疯狂但有用的想法转化为公认的标准,例如 ES6。这个过程需要一些时间,因为必须讨论、考虑、测试、填充、讨论每个角落案例,等等。也就是说,它是一个标准机构。目标是说“ES6”将具有完整和完整的含义,就像说“ES5”一样。
在实践中,您的项目要求的范围可能从保持久经考验的真实到使用非常方便但模糊不清的语言功能。您可能想从这些链接开始:
The TC39 Process Overview:这包括一个漂亮的图表,说明阶段的含义以及功能如何从一个阶段进展到另一个阶段。下面是 TC39 的概述。
The Active Proposals:快速概览某些提案所处的阶段。它还包括指向已完成、非活动和第 0 阶段提案的链接。今天,即 2017 年 4 月,Public Class Fields 处于第 2 阶段,这意味着它已被准确描述并已指定审阅者,但尚未全面审阅。
The Babel Preset Package for Stage 3:插件页面,包含所有第 3 阶段提案的 Git 和 NPM 链接。基本上,这个插件会引入包集合,这些包在理论上可以填充 TC39 阶段 3 中的当前提案。在实践中,可能会出现错误。此外,您还可以找到类似的,它链接到Stage 2 及以下的插件页面。这些页面将链接到包含第 3 阶段提案和不太稳定的提案的软件包。
Babel Preset 'env':此 Babel 预设支持已完成的提案,在已知环境中选择支持这些功能所需的正确包。例如,与旧版浏览器相比,本地 node 可执行文件需要更少的插件。可以认为是支持已获批准的未来功能的“stage-4”插件。
总而言之,如果您使用这些预发布功能,您只需要处理它们。如果您确实需要使用它们,请选择具有您需要的最大数量的阶段。如果您只是想要一个具有疯狂功能的玩具装置来围绕水冷却器进行讨论,请继续抢第 0 阶段。
【讨论】:
Babel 的阶段预设等同于 TC39 Process 以及每个提案的不同状态,以用于潜在的语言更改。它们包括该阶段所有提议更改的实现和 polyfill。
Stage-0 中当前的任何内容都是 Strawman,不是 ES6。它是未来的 Javascript,绝对不确定它是否会成为任何官方 ECMAScript 规范。
请不要只设置为stage-0,这样它就可以在不了解后果的情况下工作。
只包含 ES6 特性的 Babel Preset 是preset-es2015
【讨论】:
stage-1 怎么样?使用安全吗?将来是否可以弃用某些 stage-1 功能并更改 API?
stage-0 更安全,但绝不完全安全,不会发生变化甚至完全弃用(参见Call constructor proposal,它在第一阶段后被撤回)。但是对于除第 4 阶段(即已完成)以外的任何阶段都可以这样说。
preset-es2015 替换为 babel-preset-node6。
babel-preset-env 可以针对任何环境!
babel-preset-env 而不是babel-preset-es2015 .babel-preset-es2015 几乎已经过时了