Javascript 对于Chrome应用程序,我应该将哪些Babel transformers列入黑名单?
我正在编写ES6+代码并用Babel编译它(目前使用Javascript 对于Chrome应用程序,我应该将哪些Babel transformers列入黑名单?,javascript,google-chrome,ecmascript-6,babeljs,Javascript,Google Chrome,Ecmascript 6,Babeljs,我正在编写ES6+代码并用Babel编译它(目前使用{stage:0}作为我的.babelrcconfig) 所以我把所有的东西都编译成ES5。但我唯一的目标是ChromeV47+,它本机支持一些ES6+功能 我可以在黑名单(禁用)中选择哪一种默认设置,并使我的代码仍在Chrome 47+中运行?可用的ES6+功能 查看在Chrome中以及它们对应的Babel Transformer中默认完全实现和启用了哪些功能 ES6 Feature Release Babel T
{stage:0}
作为我的.babelrc
config)
所以我把所有的东西都编译成ES5。但我唯一的目标是ChromeV47+,它本机支持一些ES6+功能
我可以在黑名单(禁用)中选择哪一种默认设置,并使我的代码仍在Chrome 47+中运行?可用的ES6+功能
查看在Chrome中以及它们对应的Babel Transformer中默认完全实现和启用了哪些功能
ES6 Feature Release Babel Transformer Spec. Compliant*
--------------------------------------------------------------------------------------
Rest Parameters | 47 | es6.parameters | ✔
Spread | 46 | es6.spread | ✔
Arrow Functions | 45 | es6.arrowFunctions | ✔
Extended Obj. Literals | 45 | es6.properties.shorthand/computed | ✘
Computed Prop. Names | 44 | es6.properties.shorthand/computed | ✘
Classes | 42 | es6.classes | ✘
Template Strings | 41 | es6.templateLiterals | ✘
Generators | 39 | regenerator | ✘
JS iterators | 38 | es6.forOf | ✘
Block bindings | 18 | es6.blockScoping/constants | ✘
*通过查看当前实现所基于的规范草案,我得出了符合规范的专栏(re:Chrome而不是Babel)。例如“编辑草稿”——我假设这意味着可能存在不完整或不正确的实现
______
巴别塔变压器
以下是我从Babel源代码中识别的转换器之间的依赖关系:
Transformer Dependencies
--------------------------------------------
es7.classProperties | es6.classes
es7.decorators | es6.classes
es7.asyncFunctions | es6.classes
es7.objectRestSpread | es6.destructuring
______
结论
似乎没有ES6巴别塔变压器依赖于其他变压器。因此,任何在Chrome中实现的ES6功能,都符合规范,您不再需要依赖Babel来实现。这些是:,和。目前还没有为环境支持的功能禁用转换器那么简单,因为有些转换器依赖于其他转换器。例如,
es7.asyncFunctions
转换器依赖于es6.classes
,即使对于本机支持类的环境也是如此。通过“依赖”,我并不是说es7.asyncFunctions
自动调用es6.classes
,我的意思是es6.classes
必须单独启用(明确启用或不被列入黑名单)。看
可能还有兴趣:。将为您提供支持和不支持功能的列表。你可以把它和巴别塔变形金刚做比较。另外,v47中有许多Chrome支持的功能,但不是100%完整,就是不符合规范。根据OPs代码要求和应用程序需要,他们可能希望适当地禁用变压器。答案很好!谢谢你的推荐:)回答得很好,谢谢。但如果不是100%符合规范,你就排除了使用Chrome原生功能的可能性?如果我愿意接受一些不符合要求的小细节,那么从中可以看到一些额外的功能,例如ES6类只能在严格模式下工作,如果您始终使用严格模式,这是没有问题的。这是一个公平的立场还是我遗漏了什么?@callum-存在实现更改和代码不再按预期运行的风险。当然,只要你愿意放弃这方面的稳定,你的立场是公平的。我承认一个实现发生足够大的变化从而对应用程序产生巨大影响的可能性很小,我的回答是迎合那些我们完全可以说足够安全的功能,可以开始在本机上使用。你有喘息的空间!