标准babel预设要求

时间:2016-11-01 12:28:54

标签: javascript ecmascript-6 babeljs

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

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

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

至于我在docs, preset-latest组合preset-es2015 + preset-es2016 + preset-es2017中读到的内容。据我所知,这些是即将推出的ES版本的正式接受功能,最新版本不仅仅是选择ES2015,而是一次性选择所有未来版本的简写。规格不会改变,所以它足够稳定,可以用于生产。

但是stage-0stage-1stage-2stage-3怎么样?它们代表的功能仍然是即将推出的ECMAScript版本的非正式提案,或者它代表什么? ? Babel docs对此并不清楚。那是第二个问题。

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

2 个答案:

答案 0 :(得分:5)

  

...我为什么要使用babel预设,他们允许我做什么...

Babel预设可以方便地定义一组Babel插件,这样您就不必明确声明要在"plugins"的{​​{1}}下使用它们(或者在您声明配置的任何地方) )。

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

  

......(除了巴贝尔本身)?

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

  

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

如上所述,预设本身不包含功能,而是包含插件列表。这些通常代表一些相关的功能组。例如,es2016预设将包含实现提案功能的所有插件,这些插件位于由TC39(ECMAScript的“管理机构”)定义的process of submission的第0阶段。

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

  

但是,第0阶段,第1阶段,第2阶段,第3阶段如何 - 它们是否代表了即将推出的ECMAScript版本仍然是非官方提案的功能,还是代表其他东西?

没有“官方”提案。任何人都可以提交提案。但是,如果官方的意思是该提案是否得到认真考虑,则由1)在此过程中处于什么阶段以及2)社区普遍考虑其作为新功能的价值。但是,正如我们在env dropped at the very last minute所遇到的那样,即使在最后阶段,你应该总是接受一些关于是否会被接受的提案。

答案 1 :(得分:1)

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

最后,我发现这篇文章What's in our .babelrc?解释得很好,例如

  

其次,我们将模块设置为false以确保import语句   保持原样(反对将它们转换为要求)。我们这样做   使Webpack能够静态分析我们生成的代码   更有效的捆绑。

     

最后,我们针对Jest(我们的测试)提供了特定于环境的覆盖   选择框架。由于Jest在节点中运行,我们需要进行转换   我们的导入需要,并以我们所关注的任何节点运行时为目标   目前正在工作。