Node.js 25.0.0 (Current) 发布全解析:V8 14.1、--allow-net 权限模型与 Web 标准 API 落地
【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org
Node.js 25.0.0 于 2025 年 10 月 15 日作为Current版本正式发布,其核心围绕三条主线展开:将 V8 引擎升级到 14.1(带来JSON.stringify性能提升、Uint8Array内置 base64/hex 转换等)、强化"安全默认"(权限模型新增--allow-net、Web Storage 默认开启、ErrorEvent成为全局对象),以及大规模清理长期废弃的 API(如SlowBuffer进入 EOL)。本文以官方发布说明为骨架,结合本仓库(nodejs.org 官网源码)中发布数据生成、下载页渲染等实现细节,逐项解读 v25.0.0 的破坏性变更、新特性、废弃清单与安装迁移路径,帮助你评估升级影响并完成落地。
版本总览:v25.0.0 的核心定位
根据 v25.0.0.md 的 frontmatter,本版本信息如下:
| 项目 | 内容 |
|---|---|
| 版本号 | 25.0.0 |
| 发布时间 | 2025-10-15 |
| 发布线状态 | Current |
| 作者 | Rafael Gonzaga(@RafaelGSS) |
| 配套 npm | 11.6.2(本版本内升级) |
从版本节奏看,按照 Node.js 偶数版本在每年十月进入 LTS 的既有安排(v24 的发布说明中已注明其将于十月进入 LTS),可以推断 v25 是在 v24 进入 LTS 后接替成为 "Current" 发布线的下一个奇数大版本,未来约六个月内将作为当前特性版本使用,随后进入维护期直至 EOL。本仓库的 majorNodeReleases.mjs 也印证了这一点——它通过nodevu拉取各主版本的发布数据,而 releaseData.mjs 中的getNodeReleaseStatus逻辑按"最新版本是否为 LTS、是否已过 EOL 日期"来判定每个主版本处于LTS、Current还是EOL状态。
本次发布说明将变更划分为三个层面:
- Notable Changes(重点变更):4 项,均为 SEMVER-MAJOR;
- Deprecations and Removals(废弃与移除):16 项,全部为 SEMVER-MAJOR;
- Semver-Major / Semver-Minor / Semver-Patch Commits:完整的逐提交清单。
引擎升级:V8 14.1 带来的运行时改进
v25.0.0 将 V8 引擎升级到14.1,这是本次发布在运行时层面的最大变化,主要带来四类收益:
JSON.stringify性能显著提升:官方发布说明明确提及 major performance improvements,对高频序列化 JSON 的服务端场景(如 HTTP 响应序列化、缓存键构造)尤为有利;- 内置
Uint8Arraybase64/hex 转换:字节数据与文本编码之间的互转不再需要依赖第三方库,直接使用内置方法即可完成 base64 与十六进制编解码; - WebAssembly 相关优化:配合本版本同时启用的 JSPI(JavaScript Promise Integration),Wasm 与 JS Promise 之间的互操作链路被进一步优化;
- JIT 流水线优化:Maglev/TurboFan 等编译管线随 V8 14.1 得到持续打磨。
伴随 V8 升级,还有一组工程层面的大版本变更需要关注:
- NODE_MODULE_VERSION 更新到 141:原生模块(C++ addon)必须针对新 ABI 重新编译,旧的预编译二进制无法加载;
- 最低 Clang 版本提升到 19:从源码自行编译 Node.js 时需要匹配该工具链要求;macOS 侧对应地更新了最低 Xcode 版本(本版本补丁提交中更新为 16.4);
- MSVC STL 的 EphemeronRememberedSet 改用
std::map、V8_PRESERVE_MOST在 Windows 上定义为 no-op、修复 FP16bitcasts.h:这些是为适配 V8 14.1 在 Windows/跨平台构建上做的一系列修正; - V8 的 illumos 补丁与重复 zlib 符号规避:保证 Solaris/illumos 系列平台与静态链接场景下的构建与运行稳定。
安全默认与 Web 标准:--allow-net、Web Storage、全局 ErrorEvent
本次发布的三项 SEMVER-MAJOR Notable Changes 全部聚焦"安全默认"与"Web 标准 API":
1. 权限模型新增--allow-net
在既有权限模型(Permission Model)的基础上,src,permission模块新增了--allow-net权限开关(PR #58517)。这使得开发者可以:
- 默认拒绝网络访问,仅对显式允许的进程授予联网能力;
- 结合既有的文件系统、子进程等权限维度,构建更细粒度的沙箱化 Node.js 进程。
典型用法如下:
# 仅允许访问指定网络(具体参数以官方文档为准) node --allow-net=example.com app.js # 完全禁止网络,只运行纯计算/本地逻辑 node --permission app.js从仓库源码可以佐证权限模型在官网发布流程中的地位:该能力由 Node.js 核心的src,permission模块实现,属于运行时 CLI 层能力,官网下载页本身不直接涉及,但发布说明中将其列为 Notable Change,说明它对"默认拒绝、按需放行"的安全应用形态具有里程碑意义。
2. Web Storage 默认启用
--experimental-webstorage标志被取消(unflag),localStorage/sessionStorage从 v25.0.0 起默认开启(PR #57666)。此前需要显式传入实验标志才能使用的 Web Storage API,现在开箱即用,进一步缩小了 Node.js 与浏览器运行时之间的 API 差距。
3.ErrorEvent成为全局对象
lib模块将ErrorEvent暴露为全局对象(PR #58920)。ErrorEvent是浏览器中描述错误事件的 Web 标准接口,其全局化意味着错误监听(如error事件处理)相关代码可以按标准方式编写,无需再依赖实验标志或额外 polyfill。
补充:--allow-inspector与 v8 CPU profile
同在本次发布中,还有两项与安全、性能分析相关的 SEMVER-MINOR 新能力:
--allow-inspector(PR #59711):权限模型新增对 inspector(调试协议)的显式放行控制,让"默认拒绝 + 按需开启调试"成为可能;- v8 模块新增 CPU profile 能力(PR #59807):可以在运行时获取 V8 的 CPU 性能剖析数据,服务于线上性能诊断。
废弃与移除清单:16 项 API 走向 EOL
v25.0.0 一次性推进了 16 项 SEMVER-MAJOR 的废弃/移除,多数属于"将此前已废弃的 API 正式移动到 End-of-Life(EOL)"或直接删除。完整清单如下:
| 模块 | 变更内容 | 影响说明 |
|---|---|---|
| assert | assert.fail多参数形式移动到 EOL | 只应使用单一 message/error 参数形式 |
| assert | CallTracker移动到 EOL | 测试中改用mock/t.mock等替代方案 |
| async_hooks | 绑定函数上的asyncResource属性移动到 EOL | 不再通过该属性获取异步资源 |
| buffer | SlowBuffer移动到 EOL | 非零填充的慢速缓冲分配已淘汰 |
| child_process | _channel移动到 EOL | 私有内部属性不再暴露 |
| crypto | 运行时废弃默认 shake128/256 输出长度 | SHAKE 需显式指定输出长度 |
| crypto | 废弃的hash与mgf1Hash选项移动到 EOL | RSA-PSS 等场景需改用新选项 |
| crypto | 运行时废弃ECDH.setPublicKey() | 使用构造/导入 API 替代 |
| dns | lookup中 falsy hostname 移动到 EOL | 空主机名不再被静默接受 |
| fs | FileHandle依赖 GC 关闭移动到 EOL | 必须显式close() |
| fs | rmdir的 recursive 选项移动到 EOL | 使用fs.rm(path, { recursive: true }) |
| fs | 移除fs.F_OK、fs.R_OK、fs.W_OK、fs.X_OK | 访问模式常量被移除,需改用其他方式判断 |
| http | 废弃writeHeader | 使用writeHead |
| perf_hooks | 废弃的 accessors 移动到 EOF | 性能钩子相关旧访问器移除 |
| process | multipleResolves事件移动到 EOL | promise 多次 resolve 事件不再派发 |
| tls | IP 地址作为 servername 的废弃移动到 EOL | 证书校验需显式处理 IP |
| url | legacyurl中 bad port 废弃移动到 EOL | 非法端口不再被宽容解析 |
| worker | terminate 回调移动到 EOL | 使用 Promise 形式的终止 |
从模式上可以看出,本次清理的重点是fs、crypto、assert、url等高频模块中"早已废弃但仍在运行"的历史包袱。若你的代码库中使用了上述任一 API,升级 v25 前必须完成替换。
Semver-Major 变更深入:值得重点关注的破坏性改动
除上述废弃清单外,本版本的 Semver-Major Commits 中还有若干值得单独展开的破坏性改动:
1. 停止分发 Corepack(影响 pnpm / Yarn 用户)
build模块正式停止在 Node.js 发行包中分发 Corepack(PR #57617),并在补丁提交中同步移除了发布 tarball 中的 corepack(PR #59835)以及nocorepack构建标志(PR #57772)。这是 v25 对包管理器生态影响最大的一项变更:
- 系统全局的
corepack命令不再随 Node.js 安装提供; - 需要 Yarn / pnpm 的用户必须手动全局安装 corepack。
本仓库的下载页面实现已经针对这一变化做了适配:在 ReleaseCodeBox.tsx 的useSnippetProcessor中,当context.release.major >= 25且包管理器不是 NPM 时,会自动拼接一段安装 corepack 的代码片段,该片段内容见 corepack.bash:
# Install Corepack: npm install -g corepack对应地,pnpm.bash 与 yarn.bash 中的启用方式保持不变:
# Download and install pnpm: corepack enable pnpm # Verify pnpm version: pnpm -v2. assert / util 深度比较语义变化
两处比较逻辑的语义调整值得警惕:
- Promise 参与 deep equal 比较时直接失败(PR #59448):此前
deepStrictEqual等对 Promise 对象可能产生不确定结果,现在明确将其视为比较失败; - 无效日期在深度比较中视为相等(PR #57627):
new Date(NaN)这类无效日期对象之间现在被判定为相等。
这两项都会影响既有测试用例的断言结果,升级后若测试出现与日期或 Promise 相关的失败,请优先怀疑此处语义变化。
3. Node-API / node.h 原生 API 清理
面向原生模块(C/C++ addon)作者,本次清理了一批底层 API:
- 移除
node.h中"无 async context 环境下创建回调"的 API(PR #58471); - 移除废弃的
node::EmitBeforeExit、node::EmitExit(PR #58469); - 移除废弃的
node::CreatePlatform、node::FreePlatform、node::InitializeNodeWithArgs(PR #58470); CallbackScope的Local存储改为栈上存储(PR #59705);- Node-API 增加
NAPI_EXPERIMENTAL警告(PR #58280); - 同时将
_stream_*模块(PR #58337)与_tls_common、_tls_wrap(PR #57643)标记为废弃。
受影响的 addon 需要更新到适配 V8 14.1 与新版 Node-API 的版本,并重新编译。
4. 其他值得注意的破坏性改动
repl:没有new直接实例化REPLServer的行为进入 EOL(PR #59495);module:Module._debug进入 EOL(PR #58473);dgram:一组废弃 API 进入 EOL(PR #58474);fs:processReadResult()与readSyncRecursive()转为私有(PR #58672);fs stream 的open方法进入 EOL(PR #58529);util,console:正则表达式的命名分组、字符类等在控制台输出中实现彩色化(PR #59710);src:crypto.getCipherInfo()改用DictionaryTemplate实现(PR #60036),dotenv 解析性能同步优化(PR #60038)。
Semver-Minor 新能力:编译缓存、JSPI 与调试权限
本次发布的 4 项 SEMVER-MINOR 新增能力,全部属于"生活质量"与平台能力增强:
- 可移植编译缓存(portable compile cache)(PR #58797):
src模块新增选项,使编译缓存(compile cache)不再绑定特定机器的内建特性,从而可以随构建产物在 CI 与生产环境之间复用,显著缩短冷启动时间。该能力在后续版本继续演进——v25.4.0 的发布说明(v25.4.0.md)中已将 module compile cache 标记为stable; - JSPI(JavaScript Promise Integration)(PR #59941):
wasm模块启用 JSPI,允许 WebAssembly 模块直接 await 来自 JavaScript 的 Promise,大幅简化异步 Wasm 应用的编写; --allow-inspector(PR #59711):权限模型对 inspector 的显式放行;- v8 CPU profile(PR #59807):运行时获取 CPU 剖析数据。
补丁级修复与稳定性亮点
Semver-Patch Commits 中的关键修复包括:
- deps:npm 升级到11.6.2(PR #60168),ngtcp2 更新到 1.14.0、nghttp3 更新到 1.11.0(PR #59249);
- http:修复客户端在双重响应(double response)场景下的内存泄漏(PR #60062);
- http2:修复 ping 缓冲区长度不匹配时的崩溃(PR #60135);
- test_runner:修复 suite 超时问题(PR #59853),新增 JUnit 文件属性(file attribute)支持(PR #59432);
- module:修复
enableCompileCache()API 的directory选项(PR #59931); - perf_hooks:修复 stack overflow 错误(PR #60084);
- vm:在 instantiate 错误中提示模块标识符,便于定位问题(PR #60199)。
下载与安装 Node.js v25.0.0
官方发布文件清单
v25.0.0 在官方发布目录dist/v25.0.0/下提供了以下安装包与二进制(文件名为发布说明原文):
| 平台/架构 | 文件名 |
|---|---|
| Windows x64 安装器 | node-v25.0.0-x64.msi |
| Windows ARM64 安装器 | node-v25.0.0-arm64.msi |
| Windows x64 二进制 | win-x64/node.exe |
| Windows ARM64 二进制 | win-arm64/node.exe |
| macOS 安装器 | node-v25.0.0.pkg |
| macOS Apple Silicon 二进制 | node-v25.0.0-darwin-arm64.tar.gz |
| macOS Intel 二进制 | node-v25.0.0-darwin-x64.tar.gz |
| Linux x64 二进制 | node-v25.0.0-linux-x64.tar.xz |
| Linux PPC LE 64 位二进制 | node-v25.0.0-linux-ppc64le.tar.xz |
| Linux s390x 64 位二进制 | node-v25.0.0-linux-s390x.tar.xz |
| AIX 64 位二进制 | node-v25.0.0-aix-ppc64.tar.gz |
| ARMv8 64 位二进制 | node-v25.0.0-linux-arm64.tar.xz |
| 源码包 | node-v25.0.0.tar.gz |
在官网下载页获取 v25
官网下载页 current.mdx 会根据访问者的操作系统、架构、安装方式与包管理器动态生成对应的安装命令与预编译下载按钮,其核心机制在仓库中有完整实现:
- ReleaseCodeBox.tsx 将安装方法片段(如 nvm/fnm/brew/choco)与包管理器片段(npm/pnpm/yarn)拼接,并通过沙箱解释器注入
props.release等上下文后渲染为高亮代码块; - 片段本身存储在 snippets/en/download 目录下,由 downloadSnippets.mjs 按语言逐 locale 读取生成;
- PrebuiltDownloadButtons.tsx 依据 url.ts 中
getNodeDownloadUrl的平台分支逻辑(MAC 的.pkg/-darwin-*、WIN 的.msi/-win-*、LINUX 的.tar.xz等)渲染安装器与二进制下载按钮。
例如,使用 nvm 安装 v25 的命令片段见 nvm.bash:
# Download and install nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.6/install.sh | bash # in lieu of restarting the shell \. "$HOME/.nvm/nvm.sh" # Download and install Node.js: nvm install 25安装后可通过 node.bash 验证版本(片段中的${props.release.versionWithPrefix}在官网运行时会被替换为v25.0.0):
# Verify the Node.js version: node -v # Should print "v25.0.0".仓库还提供了 fnm(fnm.bash,Windows 下走winget install Schniz.fnm)、n(n.bash)、Homebrew(brew.bash,brew install node@25)、Chocolatey(choco.bash,choco install nodejs --version="25.0.0")、asdf(asdf.bash,asdf install nodejs 25.0.0)以及 Docker(docker.bash,docker pull node:25-slim)等多种安装路径。
注意:如前所述,v25 起 Node.js 不再随包分发 Corepack,使用 pnpm/Yarn 的读者请先执行
npm install -g corepack。
校验下载文件的完整性(SHASUMS)
所有发布文件都附带 PGP 签名的 SHA256 校验清单(SHASUMS256.txt.asc)。下载后建议先核对哈希再安装,避免文件损坏或篡改风险。v25.0.0 的官方校验清单(节选关键文件,完整清单见发布说明原文):
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 e06933eb919b3f27e9153b266eaf1763173cc743a26e3df109376d97800373be node-v25.0.0-aix-ppc64.tar.gz 7a274b502f4d304849f5b07c92b88a0976288217bfc5c554e85c6e2cf3fd337a node-v25.0.0-arm64.msi e3734fe04ebebf5b88cb6e1db770d3fbf736bd861748597ca008ad3d51f165f8 node-v25.0.0-darwin-arm64.tar.gz a145d8ac4e70244ee5449d6fb7a4f1f0cd759c2bab02607252da7d1a43d7b78f node-v25.0.0-darwin-x64.tar.gz 28dd46a6733192647d7c8267343f5a3f1c616f773c448e2c0d2539ae70724b40 node-v25.0.0-linux-x64.tar.gz 14dd807cb4f1dbc2136849a668101a28446de6415fa20d46d776125deecb68e3 node-v25.0.0-linux-x64.tar.xz d6e91650f8ccda6a0adc9801b4c3831e0fd65d39a0e103593641382388bc525d node-v25.0.0-linux-s390x.tar.gz 4f951fb8628ddb680deae3662fca9a8dca676a08a024819ba879d5a6aea04533 node-v25.0.0-linux-s390x.tar.xz fa3d4c0714762ffa9755b0f5fab16a096193ffde3a395d3df1a41e8ae547d590 node-v25.0.0-linux-ppc64le.tar.gz 6721a8afcd267a97d49c8a1272acbd4c1a7d8c6eaac70f5f77af5aed74943673 node-v25.0.0-linux-ppc64le.tar.xz 748be87299963eda7aabefb072274808576bc2f67b109c3823eee3ac4ffc930a node-v25.0.0-linux-arm64.tar.gz 036d6aa6808e9e4ef5f419cbd9c5ba4de5e0b6046f380d4f228173459f2fbf1c node-v25.0.0-linux-arm64.tar.xz 2fd8a02bae3891101806239c57e9f2437d6aaa7744cba35eada406c48387450f node-v25.0.0.pkg 7212eccfb7b5d4d7f27b67ea7cf0d3b69477c14a3ff8fd82f67fadbefd7efe5f node-v25.0.0-x64.msi 446cde2b456d78d4f9ccf4a8287eb8322ccdbaf60b4cf7c58bce8b5dc0e8b03e node-v25.0.0.tar.gz 2822cd7b510c955f8c4d448fa483f01d2839251774220a356a6b9bc2ab2039ae node-v25.0.0.tar.xz 97334a8da1af7efef5d1f8a90edd566a2fcfb2e2b11b68db9843ce14adf743ce win-x64/node.exe 829cfd9cfdc9dc1ed13273d746949b19a3fb9d1616fa1db4ff00c033df8fb305 win-x64/node.lib -----END PGP SIGNATURE-----在官网查看 v25:发布数据的生成与渲染
如果你好奇官网下载页的版本下拉框与状态徽章是如何得到"v25.0.0 是 Current"这一结论的,可以在仓库中找到完整的实现链路:
- majorNodeReleases.mjs 通过
nodevu拉取全部主版本数据,过滤掉没有官方支持排期的版本以及重复的 v0.x 条目; - releaseData.mjs 将其整理为
NodeRelease结构,包含status(LTS/Current/EOL)、versionWithPrefix、npm、v8、modules以及完整的minorVersions列表,并据此判断每个主版本的当前状态; - releaseData.ts 通过 React
cache将生成结果缓存供 RSC 静态构建复用; - VersionDropdown.tsx 读取 releases 列表渲染版本下拉框,并依据状态在
/download与/download/current之间正确跳转; - withReleaseAlertBox.tsx 在下载页对 EOL 版本显示不支持警告、对 LTS 版本显示特性说明。
这意味着 v25.0.0 发布后,官网下载页会自动将其标记为 Current 并提供对应的安装命令与下载链接,无需人工维护。
升级 v25 的迁移清单
综合以上变更,从 v24 及更早版本升级到 v25.0.0 前,建议按以下清单排查:
- 原生模块:确认所有 C++ addon 已适配 V8 14.1 与 NODE_MODULE_VERSION 141,并重新编译;
- 包管理器:若依赖 pnpm/Yarn,先手动
npm install -g corepack,或改用 npx 直跑对应版本; - 废弃 API 扫描:重点检查
SlowBuffer、fs.rmdir({recursive})、fs.F_OK系列常量、assert.CallTracker、assert.fail多参数形式、process.on('multipleResolves')、writeHeader、legacyurl解析等已被移除或 EOL 的用法; - 断言语义:留意 deep equal 对 Promise 与无效日期的行为变化,必要时调整测试;
- 权限模型:如已在用
--permission,评估是否启用--allow-net/--allow-inspector以进一步收紧网络与调试能力; - Web 特性:可直接使用默认开启的 Web Storage 与全局
ErrorEvent,并评估Uint8Array内置 base64/hex 转换以替换第三方编码库; - 构建工具链:若自行从源码编译,请确认 Clang ≥ 19、Xcode ≥ 16.4(macOS)等工具链要求。
v25.0.0 的发布说明原文位于 apps/site/pages/en/blog/release/v25.0.0.md,其中包含本次发布全部 4 项重点变更、16 项废弃移除以及数百条逐提交记录(含 commit hash 与 PR 编号),需要核对细节时可进一步查阅。若关注该版本线的后续演进,仓库中还有 v25.4.0(compile cache 转正、require(esm)稳定化)与 v25.5.0(--build-sea单文件可执行应用构建)的发布说明可供参考。
【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考