标准巴别塔预设要求

standard babel presets requirements

本文关键字:别塔 标准      更新时间:2023-09-26

为了设置webpack + babel + react,我被告知在.babelrc中包含以下内容:

"presets": ["latest", "stage-0", "react"]

我想理解:为什么我应该使用babel预设,它们允许我做什么(除了babel本身)?这是一个问题。希望这不是基于意见的(就stackoverflow而言),这是关于babel是如何工作的。

就我在文档中读到的,preset-latest结合了preset-es2015 + preset-es2016 + preset-es2017。据我所知,这些都是即将到来的ES版本的官方认可的特性,而"最新"是指不仅选择ES2015,而且一次选择所有未来的版本。规格不会改变,所以它足够稳定,可以在生产中使用。

但是stage-0, stage-1, stage-2, stage-3呢?它们代表的是即将到来的ECMAScript版本的非官方建议还是代表着别的什么?Babel文档对此并不清楚。这是第二个问题。

最后,插件预设有什么区别?

…为什么我要使用babel预设,它们允许我做什么…

一个Babel预设方便地定义了一组Babel插件,这样你就不必显式地声明你想在.babelrc(或任何你声明你的配置)的"plugins"下使用它们。

看看es2016预设的源代码,你就会明白我的意思了…它只是导出一个插件数组:https://github.com/babel/babel/blob/master/packages/babel-preset-es2016/src/index.js

…(除了巴别塔本身)?

Babel本身是一个接口用于它的插件。它利用了一个兄弟程序babylon, acorn的一个分支,它为插件提供了一种特殊的解析、检查和操作程序源代码的方式,以便根据你使用的插件添加你想要的功能。

最后,插件和预设有什么区别?

如前所述,预设本身不包含功能,而是一个插件列表。这些通常代表一些相关的功能组。例如,stage-0预设将包含由TC39 (ECMAScript的"管理机构")定义的处于提交过程第0阶段的提案功能的所有插件。

您可能已经注意到预设是一个JavaScript文件而不是JSON。这是因为预设定义的插件列表可以从配置中派生出来。看一下env预设,例如:https://github.com/babel/babel-preset-env/blob/master/src/index.js

但是阶段0、阶段1、阶段2、阶段3呢?它们代表的是即将到来的ECMAScript版本的非官方建议还是代表着别的什么?

没有"官方"提案。任何人都可以提交提案。但是,如果你所说的官方是指该提案是否正在被认真考虑,那么这取决于:1)它处于进程的哪个阶段;2)社区对其作为新功能的价值的普遍考虑。然而,即使是在最后阶段,你也应该对是否会被接受的建议持保留态度,就像我们在Object#observe上所经历的那样,它在最后一刻被放弃了。

我也不明白为什么"modules": false和为什么有一个"env"设置,为什么env有自己的预设配置。

最后,我找到了这篇文章。babelrc里有什么?解释得很好,例如

其次,我们将模块设置为false,以确保import语句是正确的保持原样(而不是将它们编译为require)。我们在做这个让Webpack能够静态地分析我们要生成的代码更高效的包。

最后,我们有一个特定于Jest环境的覆盖,我们的测试选择框架。因为Jest是在节点中运行的,所以我们需要进行编译我们的导入需要,目标是我们所在的任何节点运行时当前在。