7.19.0 发布:Stage 3 装饰器与更多正则表达式特性!
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
我们刚刚发布了 Babel 7.19.0!
本次更新了我们对装饰器提案的实现,该提案已于三月进入 Stage 3。同时新增了对正则表达式中重复命名捕获组提案的支持。
您可以在 GitHub 上阅读完整的更新日志。
如果您或您的公司希望支持 Babel 和 JavaScript 的发展,但不确定如何操作,您可以通过 Open Collective 向我们捐款,或者更好的是,直接与我们合作实现新的 ECMAScript 提案!作为志愿者驱动的项目,我们依赖社区支持来资助为广泛 JavaScript 用户提供帮助的工作。如需进一步讨论,请通过 team@babeljs.io 联系我们!
重点更新
新的默认值
鉴于装饰器和Record 与 Tuple提案已稳定,我们为其解析器插件选项设置了以下默认值:
-
decorators/@babel/plugin-proposal-decorators的decoratorsBeforeExport现在默认为false; -
recordAndTuple/@babel/plugin-proposal-record-and-tuple的syntaxType选项现在默认为hash。
这些选项将在 Babel 8 中移除。
Stage 3 装饰器 (#14836)
装饰器提案已升级至 Stage 3,并带来了一些微小但可见的变化。您可以通过 @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()); -
装饰器现在按以下顺序应用,而非单次传递:
- 静态方法装饰器
- 原型方法装饰器
- 静态字段装饰器
- 实例字段装饰器
- 类装饰器。
若您正从提案的旧版本迁移,建议阅读完整的 README。😉
💡 TypeScript 计划实现此版本的提案。经过近十年,终于可以编写装饰器而无需担心是由 Babel 还是 tsc 编译了!
正则表达式重复命名捕获组 (#14805)
Babel 现已支持 RegExp 重复命名捕获组提案,该提案允许在正则表达式的不同分支中重复使用相同的组名:
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 的维护者们,他们花费了大量时间审查我们的拉取请求!