7.19.0发布—第3阶段的装饰器和更多的正则表达式功能!

86 阅读3分钟

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 由装饰器接收的isPrivateisStatic 参数的属性(第二个)已被重新命名为privatestatic
  • context 参数现在总是有一个access 属性,不管装饰的元素类型如何。
  • 对元数据的支持(getMetadata/setMetadata )已经被删除,并推迟到未来的提案中
  • @(expression)()不允许使用-风格的装饰器,你必须使用@(expression())
  • 装饰器的应用顺序如下,而不是一次性的。
    1. 静态方法装饰器
    2. proto方法装饰器
    3. 静态字段装饰器
    4. 实例字段装饰器
    5. 类装饰器。

如果你是从旧版本的提案迁移过来的,我们建议阅读完整的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依靠不同的第三方包来转换正则表达式:这要感谢regjsparserregjsgenregexpu-core的维护者,他们花时间来审查我们的拉动请求