版本特性
23.x
- 原生支持
ts
20.x.x
分类 | 更新内容 |
---|---|
New Feature | 1. 权限模型(实验性):通过 --experimental-permission 控制文件系统、子进程、Worker 等资源的访问权限。2. 测试运行器稳定化:内置测试框架支持更完善的测试编写和执行流程。 3. 单一可执行应用(SEA):通过注入 Blob 构建独立二进制文件,支持多资源嵌入。 4. V8 引擎升级至:支持 5 个新特性,提升性能**。 |
Break Change | 1. 停止维护 Node.js 14:2023 年 4 月 30 日终止维护。 2. 默认禁用顶层 await :ESM 模块需显式声明 "type": "module" 。 |
Fix | 1. 性能优化:URL 解析、fetch() 和 EventTarget 初始化速度提升,Ada 2.0 解析器优化。2. ARM64 Windows 原生支持:提供官方二进制包并完善 CI 测试1。 |
19.x.x
分类 | 描述 |
---|---|
New Feature | |
实验性 Watch 模式 | 新增 node --watch 标志,监控文件变动后自动重启进程(如 node --watch index.js ),替代第三方工具 nodemon ,支持 v19.0.0 和 v18.11.0+ |
默认启用 HTTP KeepAlive | 所有 HTTP(S) 出站请求默认开启 keepAlive: true ,连接复用时长 5 秒,减少重复建立 TCP 连接的开销,提升吞吐量 |
稳定的 WebCrypto API | 除 Ed25519 、Ed448 、X25519 、X448 算法外,其他 WebCrypto 接口标记为稳定,可通过 globalThis.crypto 或 require('node:crypto').webcrypto 访问 |
V8 引擎升级至 10.7 | 支持 Intl.NumberFormat v3 API(ECMA-402 第三阶段提案),优化国际化数字格式化功能(如货币、单位显示) |
自定义 ESM 加载器 | 移除 --experimental-specifier-resolution 标志,ES Modules 解析逻辑需通过自定义加载器实现(如远程模块或格式转换) |
工具链升级 | 集成 npm@8.19.2 和 llhttp@8.1.0 ,提升依赖管理和 HTTP 解析性能 |
Fix | |
安全性增强 | 修复 OpenSSL 相关漏洞(如 CVE-2024-27980),需升级至 19.x 最新补丁版本 |
Break Change | |
移除 DTrace/SystemTap/ETW 支持 | 因维护成本过高,移除动态追踪工具支持,影响性能监控和调试(需改用第三方工具如 perf 或 async_hooks ) |
废弃实验性标志 | 移除 --experimental-specifier-resolution ,需通过自定义加载器实现模块解析扩展 |
OpenSSL 3.0 兼容性调整 | 默认禁用 MD4/MD5 等不安全算法,旧项目需添加 --openssl-legacy-provider 临时兼容 |
ERR_UNSUPPORTED_DIR_IMPORT报错
当尝试导入一个目录(如import './utils'
),如果没有明确指定文件扩展名或索引文件,Node.js会报错ERR_UNSUPPORTED_DIR_IMPORT
,这时候,--experimental-specifier-resolution=node
参数的作用就显现出来了,它允许Node.js像处理CommonJS模块一样解析目录和文件扩展名。
--experimental-specifier-resolution=node
// 改用自定义加载器(示例)
import { resolve } from 'node:module';
export async function load(url, context, nextLoad) {
if (url.endsWith('.json')) {
return { format: 'json', source: await fs.readFile(url) };
}
return nextLoad(url, context);
} [3,5](@ref)
18.x.x
New Feature | |
---|---|
全局 Fetch API | 默认集成实验性全局 fetch 、FormData 、Headers 等 API,底层基于高性能 HTTP 客户端库 undici 。支持异步请求标准化,替代复杂的 http.request 回调逻辑。 |
官方 Test Runner | 新增 node:test 模块,支持 TAP 格式的测试输出,无需依赖 Mocha/Jest。支持并发测试(concurrency 选项)、跳过/聚焦测试(skip/only ),但暂缺生命周期钩子(如 beforeEach )。 |
V8 引擎升级至 10.1 | 支持 Array.prototype.findLast 、Intl.DisplayNames 等新特性,优化类字段和私有方法的性能 |
Web Streams API | 实验性全局暴露 ReadableStream 、TransformStream 等流处理接口,与浏览器规范对齐 |
Build-time Snapshot | 支持将 JS 代码编译为 V8 快照,加速启动性能(需通过 Node.js 源码编译) |
OpenSSL 3.0 | 集成 OpenSSL 3.0,默认禁用 MD4/MD5 等不安全算法,增强 TLS 安全性 |
工具链升级 | 预编译二进制文件兼容性提升(如 Linux 基于 RHEL 8,macOS 最低支持 10.15) |
Fix | |
安全漏洞修复 | 修复 OpenSSL 3.0 的算法兼容性问题(如 CVE-2024-27980 命令注入漏洞)需升级至 18.18+ 版本。 |
内存泄漏优化 | 优化 http 和 stream 模块的资源释放逻辑,减少高并发场景的内存泄漏 |
Break Change | |
OpenSSL 算法限制 | 默认禁用 MD4/MD5,旧项目可能报错 ERR_OSSL_EVP_UNSUPPORTED ,需添加 --openssl-legacy-provider 临时兼容 |
废弃旧版 API | 移除 process.binding('http_parser') ,改用 llhttp 的 JavaScript 实现 |
Node.js 18 于 2022-10-25 成为 LTS,支持至 2025-04-30,建议生产环境优先使用 18.18+ 稳定版本
OpenSSL 3.0 问题:若遇到加密算法错误,可通过以下方式解决
export NODE_OPTIONS=--openssl-legacy-provider
17.x.x
分类 | 描述 |
---|---|
New Feature | |
基于 Promise 的核心模块 API | 新增 node:readline/promises 模块的 Promise API 支持,简化异步交互逻辑(如终端输入读取) |
错误堆栈增强 | 在致命错误的堆栈尾部添加 Node.js 版本信息,帮助诊断环境兼容性问题(可通过 --no-extra-info-on-fatal-exception 禁用) |
OpenSSL 3.0 支持 | 集成 OpenSSL 3.0,提供更严格的算法限制(如默认禁用 MD4),增强安全性 |
V8 引擎升级至 9.5 | 新增 Intl.DisplayNames API 的 calendar 和 dateTimeField 类型,支持国际化扩展 |
实验性模块加载器(Module Loader) | 提供 resolve 和 load 钩子,允许自定义 ES Modules 的解析与加载逻辑(如远程模块、格式转换) |
Fix | |
内存泄漏修复 | 优化 http 和 stream 模块的资源释放逻辑,修复特定场景下的内存泄漏问题 |
安全性增强 | 修复 OpenSSL 3.0 导致的算法兼容性问题(如 MD4 报错 ERR_OSSL_EVP_UNSUPPORTED ),提供临时解决方案 --openssl-legacy-provider |
Break Change | |
OpenSSL 3.0 算法限制 | 默认禁用非安全算法(如 MD4),导致依赖旧算法的代码报错,需显式启用兼容模式或升级依赖 |
实验性功能警告 | 未显式启用 --experimental-loader 或 --openssl-legacy-provider 时,可能触发警告或错误 |
16.x.x
分类 | 描述 |
---|---|
New Feature | |
V8 引擎升级 | 升级至 V8 9.0,支持新特性如 Array.prototype.at 、Object.hasOwn 和 Error 堆栈格式优化。 |
稳定的 AbortController | 将 AbortController 和 AbortSignal 标记为稳定 API,支持异步操作中断(如 fetch 、fs.readFile )。 |
Node-API 版本 5 | 新增 Node-API 版本 5,支持更多原生插件功能(如线程安全的数据类型操作)。 |
实验性 Web Streams | 引入 ReadableStream 和 WritableStream 的实验性实现(需通过 --experimental-streams 启用)。 |
完全支持es | ES模块不再需要--experimental-modules |
Fix | |
内存泄漏修复 | 修复 cluster 模块在频繁创建子进程时未正确清理句柄的问题。 |
安全性修复 | 升级 OpenSSL 至 1.1.1k,修复 TLS 1.3 的 SSL_has_pending 漏洞(CVE-2021-3449)。 |
文件系统改进 | 修复 fs 模块在同步方法中使用符号链接时可能导致的竞态条件。 |
Break Change | |
移除旧版 API | 彻底移除已废弃的 process.binding('http_parser') ,改用 llhttp 的 JavaScript 实现。 |
模块加载策略调整 | ES Modules 默认启用 条件性导包(基于 package.json 的 "type": "module" ),不再需要 --experimental-modules 。 |
废弃旧版工具 | 标记 crypto.createDecipher 和 crypto.createCipher 为遗留方法,推荐使用 crypto.createCipheriv 。 |
15.x.x
New Feature | |
---|---|
AbortController | 新增实验性 AbortController 和 AbortSignal 接口(需通过 --experimental-abortcontroller 启用),支持异步操作中断。 |
npm 7 集成 | 默认集成 npm 7,支持工作区(Workspaces)、自动安装 peerDependencies 和依赖冲突优化。 |
诊断工具增强 | 新增 --heapsnapshot-near-heap-limit 参数,在堆接近内存限制时自动生成快照。 |
QUIC 协议改进 | 实验性 QUIC 实现更新至最新草案版本,支持多流复用和错误处理优化。 |
Fix | |
内存泄漏修复 | 修复 http 模块在处理长时间挂起请求时未释放底层套接字的问题。 |
安全性修复 | 升级 OpenSSL 至 1.1.1i,修复 CVE-2020-1971(EDIPartyName 解析漏洞)。 |
编译问题修正 | 修复 Windows 平台下使用 Node-API 时的动态链接库加载错误。 |
Break Change | |
V8 引擎升级 | 升级至 V8 8.6,移除旧版 API(如 v8::Isolate::GetCurrentContext 的非安全用法)。 |
默认启用实验性警告 | 启用 --experimental-modules 和 --experimental-wasi 的实验性警告,未显式启用时可能报错。 |
废弃 timers 方法 | 废弃 timers.enroll() 和 timers.unenroll() ,改用 setTimeout 或 setInterval 。 |
14.x.x
分类 | 描述 |
---|---|
Break Change | |
V8 引擎升级 | 升级至 V8 8.1,移除了部分旧版 API(如 Error.prepareStackTrace 的非标准用法可能导致兼容性问题)。 |
废弃 Buffer 构造函数 | 完全移除 new Buffer() 构造函数(需改用 Buffer.alloc() 或 Buffer.from() 以避免安全问题)。 |
模块系统 | ES Modules 支持更稳定,但默认仍需要 --experimental-modules 标志(逐步向标准过渡)。 |
New Feature | |
异步上下文跟踪 | 新增 AsyncLocalStorage API(稳定化),支持异步操作中的上下文隔离与状态管理。 |
诊断工具增强 | 新增 --cpu-prof 和 --heap-prof 参数,支持生成 CPU/堆性能分析文件。 |
WebAssembly 系统调用 | 实验性支持 WASI(WebAssembly 系统接口),允许 Wasm 模块访问文件系统等操作系统资源。 |
Stream 可写接口改进 | 新增 writableFinished 和 writableCorked 属性,优化流控制逻辑。 |
Fix | |
内存泄漏修复 | 修复 http2 模块在处理大量请求时可能未正确释放内存的问题。 |
安全性修复 | 升级 OpenSSL 至 1.1.1g,修复 TLS 1.3 握手过程中的潜在漏洞(CVE-2020-1967)。 |
编译问题修正 | 修复 macOS 和 Windows 平台下构建时的兼容性错误(如 Node-API 头文件路径问题)。 |
13.x.x
分类 | 描述 |
---|---|
New Feature | |
QUIC 协议支持 | 新增实验性 net 模块的 QUIC 实现(需通过 --experimental-quic 启用),支持 HTTP/3 草案。 |
诊断工具增强 | --diagnostic-report 升级为稳定功能,支持按需生成报告(替代旧版 --report )。 |
堆分析功能 | 新增 v8 模块的 writeHeapSnapshot 方法,可直接生成堆快照文件。 |
启动时预加载 | 支持 --require 参数预加载模块(如 --require=esm ),优化 ES Modules 的启动流程。 |
支持原生ES 语法 | package.json 添加"type": "module" |
Break Change | |
默认模块解析策略 | ES Modules 的 --experimental-modules 仍需要,但默认启用 条件性导包(根据 type: module 的 package.json )。 |
废弃 url.parse | 标记 url.parse 为遗留方法,默认禁用对非标准 URL 的宽松解析(需通过 url.parse(urlString, true) 启用严格模式)。 |
移除旧版 API | 移除已废弃的 async_hooks 旧版 API(如 asyncResource.triggerId ),需使用新版上下文跟踪接口。 |
Fix | |
内存泄漏修复 | 修复 http 模块在连接中断时未正确释放资源的漏洞。 |
安全性修复 | 升级 OpenSSL 至 1.1.1d,修复 TLS 1.3 会话恢复漏洞(CVE-2019-1549)。 |
编译问题修正 | 修复 Windows 平台下使用新版 Node-API 时的编译错误。 |
12.x.x
分类 | 描述 |
---|---|
Break Change | 不兼容更新 |
V8 引擎升级 | 升级至 V8 7.4,移除了部分已废弃的 API(如 v8::Promise 旧接口),可能导致部分 Native 模块不兼容。 |
默认 HTTP 解析器 | 替换为 llhttp (替代旧版 http-parser ),解析行为可能有细微差异(如严格模式下的标头格式)。 |
模块系统 | 对未捕获的异常,ES Modules 的加载错误会触发 process.on('unhandledRejection') (旧版为同步抛出)。 |
New Feature | 新功能 |
首次引入ES支持 | node --experimental-modules node.js |
诊断报告 | 新增实验性功能 --report ,可生成运行时的诊断报告(内存、CPU、句柄等信息)。 |
TLS 1.3 支持 | 默认启用 TLS 1.3(需 OpenSSL 1.1.1 支持),提升安全性。 |
启动性能优化 | 通过 V8 快照技术,减少启动时间约 30%。 |
Worker Threads | 改进 Worker 线程的实验性 API,支持 worker.postMessage() 和 SharedArrayBuffer 。 |
Fix | 修复 |
内存泄漏修复 | 修复 http2 模块在流销毁后未正确释放内存的问题。 |
错误处理 | 修复 async_hooks 在特定场景下导致栈溢出的问题。 |
安全性修复 | 升级 OpenSSL 至 1.1.1b,修复多个安全漏洞(如 DSA 签名漏洞 CVE-2019-1547)。 |