最新发布的 Node.js 24 并非简单的增量更新,它带来了切实改进,直击开发痛点,并为服务端 JavaScript 开辟了新的可能性。本文将深入解析更新日志,聚焦那些真正值得关注的重要特性。
内置测试运行器增强
Node.js 24 的内置测试运行器现在能智能管理测试生命周期,不再需要为子测试显式添加 await
语句。这个看似微小的改进,解决了早期版本中测试套件容易出现的隐晦错误。
对比新旧测试模式:
import assert from "node:assert";
import { test } from "node:test";
import { setTimeout } from "node:timers/promises";
test("父测试", (t) => {
t.test("第一个检查", async (t) => {
await setTimeout(1000);
assert.strictEqual(2 + 2, 4);
});
t.test("第二个检查", (t) => {
assert.strictEqual(1 + 1, 2);
});
});
在 Node.js 23 及更早版本中,上述代码会因"测试未在父测试结束前完成"而失败:
开发者被迫为每个子测试添加显式 await
:
test("父测试", async (t) => {
await t.test("第一个检查", async (t) => { ... });
await t.test("第二个检查", (t) => { ... });
});
Node.js 24 现在能自动检测并等待子测试完成,使测试代码更简洁,减少竞态条件和时序错误的风险:
JavaScript 引擎升级
Node.js 24 搭载 V8 13.6 引擎,带来多项新特性:
正则表达式转义
新增原生方法 RegExp.escape()
可安全转义正则表达式中的特殊字符,避免动态插入用户输入时出现语法错误:
console.log(RegExp.escape(`转义符号如:.+*?()|[]{}^$`));
// 输出:\x45scaping\x20symbols\x20like\x3a\x20\.\+\*\?\(\)\|\[\]\{\}\^\$
增强的错误处理
传统错误检测方法如 instanceof
在不同执行环境(如 Node.js vm
上下文)中会失效。新增的 Error.isError()
方法能准确识别 Error
实例:
console.log(Error.isError(new Error())); // true
console.log(Error.isError(new TypeError())); // true
console.log(Error.isError({ name: "Error", message: "错误" })); // false
WebAssembly 内存扩展
支持 64 位内存寻址(Memory64),突破 32 位指针的 4GB 内存限制,最高可达 16GB。但性能会有 10%-100%+ 的下降,主要源于显式内存边界检查的开销。
紧凑浮点存储
新增 Float16Array
类型数组,为机器学习、图形处理和科学计算等场景提供内存高效的浮点存储方案。
URLPattern API 全局化
URLPattern
构造函数现在全局可用,无需显式导入:
const apiRoute = new URLPattern({ pathname: "/api/:resource/:id" });
const matches = apiRoute.test("https://example.com/api/users/123");
权限模型正式发布
Node.js 20 引入的实验性权限模型现已稳定,命令行标志从 --experimental-permission
简化为 --permission
。该特性提供对文件系统、网络连接等敏感操作的细粒度控制:
HTTP 与网络升级
内置 Undici 7 带来显著改进:
- 更严格的
fetch()
规范合规 - 预置拦截器包括重定向、重试、请求转储等
- 基于 SQLite 的响应缓存,支持跨进程共享
- 新的
WebSocketStream
实现 - 替代
throwOnError
的responseError
拦截器
异步上下文追踪优化
AsyncLocalStorage
API 采用新的底层实现 AsyncContextFrame
,为跨异步操作的上下文追踪(如请求跟踪)带来显著性能提升。如需回退旧实现,可使用 --no-async-context-frame
标志。
NPM 11 更新
捆绑的 npm 升级至 v11,主要改进:
- 支持 Node
^20.17.0 || >=22.9.0
- 安装性能优化
- 增强的安全漏洞检测
- 移除
npm hook
命令 npm init
新增类型提示
废弃与移除
逐步淘汰的旧 API:
- 传统 URL 解析器(
url.parse()
) - 已弃用的 TLS 方法如
tls.createSecurePair()
- 无
new
实例化的REPLServer
和Zlib
SlowBuffer
由Buffer.allocUnsafeSlow()
替代
升级建议
Node.js 24 将在 2025 年 10 月进入 LTS 阶段,提供支持至 2028 年 4 月。推荐使用版本管理工具如 Mise 进行多版本管理:
mise use -g node@24
建议重点测试:
- 新语言特性应用场景
- 废弃 API 的替代方案
- 安全敏感应用的权限模型
完整变更请参阅 Node.js 24 官方发布说明。如需参与后续版本开发,可查看 GitHub 上的待解决问题和贡献指南。
原文地址:blog.appsignal.com/2025/05/09/…
作者:Damilola Olatunji
如果您觉得内容对您有帮助,欢迎收藏、点赞、分享
欢迎关注公众号【前端小石匠】,一起学习,共同进步~