主要功能与增强
Node.js 23 现已发布,带来了新功能、性能提升和更好的开发体验。该版本提升了兼容性和稳定性,为构建高效应用程序提供了更多工具。
此外,Node.js 22 将于10月29日那周升级为长期支持版本 (LTS),进入长期维护阶段,以确保稳定和安全的更新。
Node.js 23 的亮点包括:
- 使用
require()
加载原生 ES 模块的支持:在 v23.0.0 之前,这项功能需通过--experimental-require-module
启用。 - 停止支持 32 位 Windows 系统:Node.js 23 不再支持 32 位 Windows,专注于现代环境。
- 稳定的
--run
命令:--run
标志已稳定,用于更高效的脚本执行。 - 测试运行器增强:测试运行器现在支持对覆盖文件使用 glob 模式,提高了测试配置的灵活性。
在 v20.x 和 v22.x 中,通过命令行标志require(esm)
现在默认启用--experimental-require-module
可以加载原生 ES 模块。在 v23.x 中,这一功能现已默认启用。该功能仍处于实验阶段,我们正在收集用户反馈,以便在完全稳定之前进行更多的调整。为此,在 v23.x 中,当 Node.js 实例首次通过require()
加载原生 ES 模块时,将会发出实验性警告。
如果此功能导致任何回归问题,用户可以在 Node.js 的问题追踪器上报告。同时,作为解决方法,可以使用 --no-experimental-require-module
来禁用该功能。我们预计会在 v23.x 中测试该功能,查找潜在的回归问题并进行相应调整,然后在 Node.js 22.x 的 LTS 提升后的后续 semver-minor 版本中回溯该功能的解锁。
启用此功能后,Node.js 不会再抛出 ERR_REQUIRE_ESM
错误,即使 require()
被用于加载 ES 模块。不过,如果加载的 ES 模块或其依赖项包含顶级 await
,可能会抛出 ERR_REQUIRE_ASYNC_MODULE
错误。当 require()
成功加载 ES 模块时,返回的对象将是一个 ES 模块命名空间对象,类似于 import()
返回的对象,可通过 util.isModuleNamespaceObject()
进行检查。
用户可以通过 process.features.require_module
检查当前 Node.js 实例中是否启用了 require(esm)
。对于包,”module-sync” 导出条件可以作为检测当前 Node.js 实例中 require(esm)
支持的方式,允许同时使用 require()
和 import
来加载相同的原生 ES 模块。有关此功能的更多详情,请参阅文档。