7.19.0发布——第3阶段的装饰器和更多的正则表达式功能!
我们刚刚发布了Babel 7.19.0!
这个版本更新了我们对装饰器提案的实现,该提案在3月达到了第三阶段。它还包括对正则表达式的新的重复命名捕捉组建议的支持。
你可以在GitHub上阅读整个更新日志。
如果你或你的公司想支持Babel和JavaScript的发展,但不确定如何支持,你可以在我们的开放集体中为我们捐款,更好的是,直接与我们合作实现ECMAScript的新提案作为一个志愿者驱动的项目,我们依靠社区的支持来资助我们支持广大的JavaScript用户。如果你想讨论更多,请联系team@babeljs.io!
亮点
新的默认值
鉴于装饰器以及Record和Tuple提案的稳定,我们为其分析器插件选项设置了一些默认值。
decorators/@babel/plugin-proposal-decorators'sdecoratorsBeforeExport现在默认为false。recordAndTuple/@babel/plugin-proposal-record-and-tuple'的syntaxType选项现在默认为hash。
这些选项将在Babel 8中被删除。
第三阶段的装饰器(#14836)
装饰器建议被提升到第三阶段,并有一些微小但可观察的变化。您可以使用@babel/plugin-proposal-decorators 的"version": "2022-03" 选项启用新版本。
{
"plugins": [
["@babel/plugin-proposal-decorators", {
"version": "2022-03"
}]
]
}
如果你是从2021-12 版本迁移过来的,以下的中断变化可能会影响你:
- 由访问器装饰器返回的对象的
initialize方法已被重新命名为init。 context由装饰器接收的isPrivate和isStatic参数的属性(第二个)已被重新命名为private和static。context参数现在总是有一个access属性,不管装饰的元素类型如何。- 对元数据的支持(
getMetadata/setMetadata)已经被删除,并推迟到未来的提案中。 @(expression)()不允许使用-风格的装饰器,你必须使用@(expression())。- 装饰器的应用顺序如下,而不是一次性的。
- 静态方法装饰器
- proto方法装饰器
- 静态字段装饰器
- 实例字段装饰器
- 类装饰器。
如果你是从旧版本的提案迁移过来的,我们建议阅读完整的README。
💡 TypeScript计划实施这一版本的提案。经过近十年的时间,我们将有可能编写装饰器,而不必担心它们是否会被Babel或tsc编译!
正则表达式重复命名捕捉组(#14805)
Babel 现在支持正则表达式重复命名捕捉组的提议,它允许在其他正则表达式分支中重复使用相同的组名:
const dateRE = /(?<year>\d\d\d\d)-(?<month>\d\d)|(?<month>\d\d)-(?<year>\d\d)/;
console.log("2022-12".match(dateRE).groups); // { year: "2022", month: "12" }
console.log("12-2022".match(dateRE).groups); // { year: "2022", month: "12" }
您可以使用@babel/plugin-proposal-duplicate-named-capturing-groups-regex 插件启用该提议:
{
"plugins": ["@babel/proposal-duplicate-named-capturing-groups-regex"]
}
Babel依靠不同的第三方包来转换正则表达式:这要感谢regjsparser、regjsgen和regexpu-core的维护者,他们花时间来审查我们的拉动请求