7.24.0 发布:装饰器更新与 JSON 模块导入
本页面由 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" 选项启用此提案:
{
"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 插件启用此功能:
{
"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-flow 的 experimental_useHermesParser 选项更轻松地启用此解析器:
{
"presets": [
["@babel/preset-flow", {
"experimental_useHermesParser": true
}]
]
}
我们正在考虑在未来的版本中从 @babel/parser 移除 Flow 支持,转而采用这个基于 Hermes 的解析器。请试用它,并在 Hermes 的 bug 跟踪器 报告解析错误,同时在 讨论区 分享您的使用体验!
Hermes 解析器目前还不支持基于文件内注释的转换