Node.js 24 相较于当前LTS版本 Node.js 22 引入了许多新功能、性能改进和重大变化。
1. V8 引擎升级
- Node.js 24: 升级到 V8 13.6(Node.js 22 使用 V8 12.4)。
- 新 JavaScript 特性:
- 支持 RegExp.escape:简化正则表达式转义。
- 支持 Explicit Resource Management(using 语句):用于自动资源管理。
- 支持 Error.isError:更可靠的错误检测。
- 支持 Float16Array:新的数组类型,优化数值计算。
- 支持 Intl.DurationFormat:国际化时间格式化。
- 支持 Promise.try:简化无参数 Promise 创建。
- 支持正则表达式修饰符和重复命名捕获组。
- 支持 Atomics.pause:优化多线程操作。
- 性能提升:V8 13.6 带来更好的内存管理和执行效率,尤其在短生命周期 CLI 程序中。
- 注意:Node.js 22 默认启用了 Maglev 编译器,但在 22.9.0 后禁用以修复性能回归。Node.js 24 未重新默认启用 Maglev,需手动配置。
2. 核心模块和 API 更新
- Undici 7.0.0:
- Node.js 24 升级到 Undici 7.0.0(Node.js 22 使用旧版)。
- 改进 HTTP 客户端性能,支持更新的 HTTP 标准。
- 增强 fetch() API 的开发体验,适合构建 HTTP 密集型服务。
- 注意:Undici 7.0.0 包含一些破坏性变化,需检查兼容性。
- URLPattern 全局化:
- Node.js 24 将 URLPattern 设为全局对象,无需显式导入。
- 简化 URL 模式匹配,适合路由和解析场景。
- AsyncLocalStorage 默认使用 AsyncContextFrame:
- 提升异步上下文追踪的性能和可靠性。
- 开发者需测试现有代码,确保与新行为兼容。
- 权限模型改进:
- 权限模型标志从 --experimental-permission 改为 --permission。
- 增强对文件系统、网络等的细粒度控制,适合安全敏感应用。
3. npm 升级
- Node.js 24: 包含 npm 11(Node.js 22 使用 npm 10)。
- 主要变化:
- 安装速度更快。
- 改进安全检查,增强依赖管理。
- 支持 Node.js ^20.17.0 || >=22.9.0。
- npm init 新增 type 提示,优化 package.json 创建。
- 移除 npm hook 命令。
- --ignore-scripts 现在适用于所有生命周期脚本。
- 不再回退到旧的 audit 端点,提升可靠性。
4. 测试运行器改进
- Node.js 24:
- 测试运行器支持自动等待子测试(auto-await subtests),简化异步测试。
- 增强 glob 模式支持,优化测试覆盖率配置。
- Node.js 22:
- 测试运行器仍为实验性,功能较少。
5. 废弃和破坏性变化
- 废弃功能:
- 废弃 SlowBuffer、tls.createSecurePair 等旧 API。
- 旧式文件系统常量(如 fs.F_OK)逐步淘汰,建议使用现代替代方案。
- 破坏性变化:
- 移除对 32 位 Windows 系统支持,需升级到 64 位环境。
- child_process 中 spawn 和 execFile 不再接受 args 参数,需调整代码。
- 移除 deps/simdutf,可能影响依赖此库的模块。
- 调整构建配置(如 V8 TLS 和 MSVC 编译支持),可能影响自定义构建。
- 平台支持:
- macOS 最低版本提升至 13.5。
- Xcode 最低版本要求 16.1。
- 移除对 32 位 s390 和 ppc 架构支持,armv7 降级为实验性。
6. 性能优化
- 流(Streams):
- Node.js 22 将默认 High Water Mark 从 16KiB 提高到 64KiB,Node.js 24 延续此优化。
- 提升流处理性能,但内存敏感环境需手动设置 setDefaultHighWaterMark。
其他优化:
- Blob.slice() 性能提升超过 2.5 倍。
- String.prototype.startsWith 和 endsWith 因 V8 升级而加速。
- 更高效的 AbortSignal 创建,优化 fetch() 和测试运行器。
7. 其他功能和改进
- 稳定的功能:
- Node.js 22 稳定的 --run 命令(运行 package.json 脚本)和 Watch 模式在 Node.js 24 中继续完善。
- WebSocket 客户端默认启用(Node.js 22 移除实验标志)。
- 实验性功能:
- Node.js 24 引入更多实验性 API(如 SQLite 集成),但未完全稳定。
- 构建和工具链:
- Windows 构建从 MSVC 切换到 ClangCL,提升编译效率。
- 增强对 Python 3.13 的支持。