跳至主内容

7.24.0 发布:装饰器更新与 JSON 模块导入

· 1 分钟阅读
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

Babel 7.24.0 正式发布!

我们更新了装饰器实现以匹配提案最新版本,并改进了类私有字段和方法的转换方式。同时新增了对浏览器和 Node.js 中导入JSON 模块的支持——这是一个依赖于导入属性的 Stage 3 阶段提案。

您可以在 GitHub 查看完整更新日志。

如果您或您的公司希望支持 Babel 和 JavaScript 的发展,但不确定如何操作,您可以通过 Open Collective 向我们捐款,或者更好的是,直接与我们合作实现新的 ECMAScript 提案!作为志愿者驱动的项目,我们依赖社区支持来资助为广泛 JavaScript 用户提供帮助的工作。如需进一步讨论,请通过 team@babeljs.io 联系我们!

重点更新

装饰器更新(#16242

过去几年中,装饰器 Stage 3 提案经历了多次细微调整,遗憾的是各工具实现的版本存在细微差异

我们已更新实现以匹配提案最新版本。该版本已在 TypeScript 中实现,并正被浏览器原生支持。与先前实现的 2023-05 版本主要区别在于:通过 context.addInitializer 方法注册的初始化器执行顺序。

您可在 @babel/plugin-proposal-decorators 中通过设置 "version": "2023-11" 选项启用此提案:

babel.config.json
{
"plugins": [
["@babel/plugin-proposal-decorators", {
"version": "2023-11"
}]
]
}

您也可在 Babel 在线 REPL 中体验新版装饰器提案。

JSON 模块导入(#15829#15870

Babel 7.24.0 终于支持自 2021 年就处于 Stage 3 阶段的 JSON 模块提案。该提案允许使用 import 声明配合 type: "json" 导入属性直接导入 JSON 文件:

import myConfig from "./config.json" with { type: "json" };

Babel 将根据您的 targets 配置,将这些导入转换为目标平台的 JSON 文件加载方式:

  • 现代浏览器

    const myConfig = await fetch(import.meta.resolve("./config.json"))
    .then(r => r.json());
  • 不支持 import.meta 的旧版浏览器

  • Node.js (ESM)

  • Node.js (CommonJS)

    const myConfig = JSON.parse(
    require("fs").readFileSync(require.resolve("./config.json"))
    );
  • 上述各种组合

您可以通过 @babel/plugin-proposal-json-modules 插件启用此功能:

babel.config.json
{
"targets": ["chrome 90", "firefox 90", "node 20.6"],
"plugins": ["@babel/plugin-proposal-json-modules"]
}

基于 Hermes 的 Flow 解析器 (#16284)

Babel 在很久以前就实现了对解析和转换 Flow 类型注解的支持,但在过去的一年里,我们在跟进新的 Flow 语言特性方面做得不够好。

与此同时,Hermes 团队开发了 babel-plugin-syntax-hermes-parser 插件,让您能直接使用 React Native 的新 JavaScript 引擎 Hermes 来解析 Flow 代码。它支持所有最新的 Flow 特性,例如 as 类型转换和条件类型。

现在您可以通过 @babel/preset-flowexperimental_useHermesParser 选项更轻松地启用此解析器:

babel.config.json
{
"presets": [
["@babel/preset-flow", {
"experimental_useHermesParser": true
}]
]
}

我们正在考虑在未来的版本中从 @babel/parser 移除 Flow 支持,转而采用这个基于 Hermes 的解析器。请试用它,并在 Hermes 的 bug 跟踪器 报告解析错误,同时在 讨论区 分享您的使用体验!

警告

Hermes 解析器目前还不支持基于文件内注释的转换