 发布详解:JSON 模块与导入属性正式稳定、根证书更新及全量变更解读)
Node.js 20.18.3 Iron (LTS) 发布详解JSON 模块与导入属性正式稳定、根证书更新及全量变更解读【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.orgNode.js 于 2025 年 2 月 10 日发布 v20.18.3Iron 代号 LTS 版本由发布经理 Marco Ippolitomarco-ippolito签收。本版本最核心的变化是ESM 导入属性import attributes与 JSON 模块正式标记为稳定同时将内置 TLS 根证书同步更新到NSS 3.104并收录了约 140 个涉及构建、依赖、运行时、网络、诊断与测试的提交。本文以仓库中的 v20.18.3 发布原文 为骨架逐项解读 Notable Changes、全量 Commits 分类、下载制品与校验方式并结合仓库内 发布文章生成脚本 说明这类发布博客是如何自动化产出的。版本概览这是什么版本版本号20.18.3发布线v20.x代号Iron属于LTS长期支持维护阶段发布时间2025-02-10发布经理Marco Ippolitomarco-ippolito类别release发布博客从语义化版本号看这是一个patch补丁版本不包含破坏性 API 变更主要目标是修复缺陷、更新依赖与文档、提升稳定性和构建工具链的健壮性。对于仍在使用 Node.js 20 LTS 的生产环境这类维护版本通常会通过npm、版本管理器nvm / fnm / volta或官方二进制包平滑升级。在 nodejs.org 仓库中该发布记录以 Markdown 形式归档于 发布博客目录文件名v20.18.3.md其 frontmatter 声明了category: release与layout: blog-post站点的博客列表与归档页会据此自动聚合。Notable Changes 重点解读本次发布共 6 项被列为值得注意的变化其中两项对开发者有直接影响其余为项目治理与协作层面的变更。ESM导入属性与 JSON 模块正式稳定030f155986Nicolò RibaudoPR #55333将import attributes导入属性与JSON modulesJSON 模块标记为稳定特性。这意味着在 Node.js 20.18.3 起无需任何实验性 flag即可直接通过带with属性语法的 ESM 导入加载 JSON 文件// data.json { name: nodejs.org, version: 20.18.3 } // app.mjs import data from ./data.json with { type: json }; console.log(data.name); // nodejs.org console.log(data.version); // 20.18.3值得说明的几点with { type: json }是 ESM 标准中import attributes的现行语法用于在导入时声明模块类型此前演进过程中的assert { type: json }断言语法已逐步被取代新代码应统一使用with。JSON 模块稳定后--experimental-json-modules等早期实验开关不再是必需项开发者可以像导入普通 JS 模块一样使用import处理 JSON 数据配合静态分析工具也更友好。本提交同时为文档补充了 JSON 模块稳定化的 history 记录见618e005672PR #55855并在文档中明确了import.meta仅限 ES 模块内使用b739c2a926PR #56186帮助使用者规避混用 CJS/ESM 时的常见误区。这是本版本对普通 Node.js 使用者影响最大的一项能力收敛JSON 数据加载从需要 flag 的实验特性正式走入稳定 API 集合。加密根证书更新至 NSS 3.104247fa1959fRichard LauPR #55681将 Node.js 内置的 TLS 根证书集合同步更新为Mozilla NSS 3.104。Node.js 在发行包中维护了一份随 NSS 同步的根证书清单用于 HTTPS 客户端与服务端在系统证书库之外的信任判定新版本会纳入新增的受信任根证书并移除已过期或被吊销的旧根证书对于使用自签证书链、私有 CA 或依赖特定旧根证书的存量服务升级后若出现 TLS 校验告警应优先检查证书链是否仍受新版根库信任配套提交adfc2f993a同 PR #55681修复了根证书更新脚本本身的问题确保未来维护流程能持续自动同步 NSS 的更新而不会产生手工更新的漂移。该改动对大多数应用透明但影响所有基于 Node.js 发起的 TLS 连接因此在安全合规要求较高的环境中值得在升级计划中标注。治理与协作严格 semver-major 发布策略与新 Collaborator39b89e90b4Rafael GonzagaPR #55732doc子系统明确了对semver-major 版本发布执行严格策略enforce strict policy to semver-major releases从文档层面收紧主版本发布流程的规范性b9b006331fJordan HarbandPR #56132将LJHarb加入 Collaborator 名单29862ae105Jason ZhangPR #55531将jazelly加入 Collaborator 名单。这些变更属于 Node.js 项目治理范畴Collaborator 的进出、发布策略的文档化都会在本版本发布博客中同步记录便于社区追溯每次发布的时间线与人员变更。Commits 全量解读按子系统本版本共收录约 140 个提交覆盖esm、crypto、deps、build、src、http2、test_runner、util、tools、doc等子系统。以下按模块分组梳理全部条目均可在 v20.18.3.md 中核对原始 hash 与 PR 号。模块系统esm将 import attributes 与 JSON 模块标记为稳定Notable ChangePR #55333为导入方不是文件的场景增加回退处理86cb697b81PR #55471修复resolvehook 中与importAssertion的不一致问题8c8de30680PR #55365安全与加密crypto / report / node-api / sea / stream确保CryptoKey的usages与algorithm使用缓存对象避免每次访问重复构造23fb644037PR #56108根证书更新至 NSS 3.104Notable ChangePR #55681修复report在exclude-network模式下 getReport 的网络查询问题6308c18dbbPR #55602允许在 finalizer 中调用napi_delete_reference完善 Node-API 引用生命周期bd99bf109fPR #55620SEA单文件可执行应用仅对主线程断言 snapshot 主函数ff2eec7275PR #56120stream传播AbortSignal的取消原因ac583d4549PR #55473网络与 I/Odgram / dns / http2 / url / buffer / fsdgram校验 UDP 缓冲区大小以避免文件描述符泄漏1d14886266PR #56084dns停止使用已废弃的ares_query22e0d17097PR #55430尊重order选项44f3b23749PR #55392http2新增ALPNCallback选项支持739ee18430PR #56187修复过早移除监听器导致的内存泄漏7ba6dcf180PR #55966修复客户端 async storage 持久性问题4c15bd44a0PR #55460url在pathToFileURL中正确处理 unsafe 字符bd0ec907daPR #54545buffer为concat补齐 zero-fill 行为文档ea1c97ac16PR #55562fs修复 Promisesreaddir()中修改options影响结果的问题2c6dcf7209PR #56057ReadFileContext改为按需懒加载以降低启动开销9317feb829PR #55998运行时与诊断cli / src / module / worker / diagnostics_channel / events / libcli--heap-prof标志现在可放入NODE_OPTIONS环境变量64b140d484PR #54259便于对子进程统一开启堆分析module防止主线程在 esm worker 结束前提前退出6797a35a5bPR #56183worker修复 worker 退出后加入导致崩溃的问题aa031b3eecPR #56191diagnostics_channel修复发布过程中退订unsubscribe during publish的问题de265b9558PR #55116events优化EventTarget.addEventListener性能a41b0e1247PR #55312lib为compileFunction的 options 增加校验ac57dadd9aPR #56023test_runner的 mock timers 尊重timeout_max行为f10857828fPR #55375src修复 Windows 上的 kill 信号处理a882536596PR #55514提升node:osuserInfo性能df1002438aPR #55719修复 DNS 任务创建失败时的崩溃f17416ec3ePR #55521移除基于 ICU 的ToASCII/ToUnicode0977bb6c1dPR #55156修复winapi_strerror错误字符串72817072e2PR #55207nodeTiming.uvMetricsInfo优化6f47f53f90PR #55614依赖升级depsV8cherry-pick26fd1dfa9cd6与 backportae5a4db8ad86PR #55961simdutf连续升级至 5.6.4PR #56255、5.6.3PR #55973、5.6.2PR #55889、5.6.1PR #55850、5.6.0PR #55379c-ares升级至 v1.34.4PR #56256、v1.34.3PR #55803、v1.34.2PR #55463、v1.34.1PR #55369zlib更新至1.3.0.1-motley-82a5fecPR #55980与1.3.0.1-motley-7e2e4d7PR #54432corepack升级至 0.30.0PR #55977acorn升级至 8.14.0PR #55699与 8.13.0PR #55558ada升级至 2.9.1PR #54679googletest更新至df1544bPR #55465依赖层面以安全与性能维护型升级为主其中 simdutf字符串 UTF 编解码与 c-ares异步 DNS的迭代直接影响字符串处理与 DNS 解析的稳定性和性能。构建与工具链build / tools / benchmark / test / test_runner / metabuild修复 loongarch64 的DESTCPUPR #56271、d8 构建缺失 fp16 依赖PR #56266、AIX 7.1 卸载脚本PR #55438、GN 构建中 cares/uv 依赖与node_use_amaro标志PR #55477 / #55798、系统 ICU 76 构建PR #55563等新增major release actionPR #56199与create release proposal actionPR #55690把主版本发布与发布提案流程自动化tools新增 release commit 提案 linterPR #55923、REPLACEME 检查PR #56251修复根证书更新器Notable ChangePR #55681、undici/nghttp3/c-ares 更新脚本PR #56069 / #56007 / #55717WPT 每日报告覆盖所有受支持版本PR #55619benchmark新增test-reportersPR #55757、test_runner/mock-fnPR #55771、nodeTiming.uvmetricsinfoPR #55614等基准并支持--runs参数PR #55158test大量测试用例的健壮性修复与去 flaky 化例如 BoringSSL 兼容PR #55927 / #55491、sea 测试在 PPC 上解除排除PR #56217、readdir测试迁移到 test runnerPR #55750等test_runner简化 hook 运行逻辑PR #55963对已 mock 的日期重复 mock 时报错PR #55858mock timers 支持scheduler.waitPR #55244meta升级 CodeQL、checkout、setup-node、setup-python、upload-artifact、cache 等 CI 动作至较新版本并将部分 Collaborator 移入 emeritus 名单PR #55381文档与协作doc文档类提交数量在本版本中占比最高主要包括四类ESM 示例补齐为node:repl、node:readline、node:timers、node:string_decoder、path.md、zlib等模块补充 ESM 用法示例PR #55432 / #55335 / #55857 / #55507 / #55745 / #55946history 记录为 Permission Model、JSON 模块稳定化、textEncoder.encodeInto()、URL.prototype.toJSON等补充变更历史条目PR #56707 / #55855 / #55990 / #55818发布流程文档更新 announce 文档、新增发布 FAQ、补充-a/-S标志示例、将git node release --promote纳入步骤PR #56200 / #55992 / #56124 / #55836 / #55835澄清与修正澄清UV_THREADPOOL_SIZE、--max-semi-space-size、console流行为、highWaterMark、outgoingMessage.setHeaders()返回值等描述并修正 SHASUMS256 校验命令PR #55832 / #55495 / #55616 / #55462 / #55290 / #55420其他值得关注的修复util / srcutil修复 Latin1 解码返回字符串输出83137bceb6PR #56222并新增 Latin1 解码快速路径cca7c518dePR #55275不再依赖可变的Object/Function的constructor属性195cc42935PR #56188不再捕获循环toStringTag抛错7ed346d8fdPR #55544下载资源与完整性校验官方发行制品以下制品均位于官方发行目录nodejs.org/dist/v20.18.3/覆盖 Windows / macOS / Linux / AIX 多平台平台与架构制品Windows 32 位安装器node-v20.18.3-x86.msiWindows 64 位安装器node-v20.18.3-x64.msiWindows ARM 64 位安装器node-v20.18.3-arm64.msiWindows 32 位二进制win-x86/node.exeWindows 64 位二进制win-x64/node.exeWindows ARM 64 位二进制win-arm64/node.exemacOS 64 位安装器node-v20.18.3.pkgmacOS Apple Silicon 64 位二进制node-v20.18.3-darwin-arm64.tar.gzmacOS Intel 64 位二进制node-v20.18.3-darwin-x64.tar.gzLinux 64 位二进制node-v20.18.3-linux-x64.tar.xzLinux PPC LE 64 位二进制node-v20.18.3-linux-ppc64le.tar.xzLinux s390x 64 位二进制node-v20.18.3-linux-s390x.tar.xzAIX 64 位二进制node-v20.18.3-aix-ppc64.tar.gzARMv7 32 位二进制node-v20.18.3-linux-armv7l.tar.xzARMv8 64 位二进制node-v20.18.3-linux-arm64.tar.xz源码包node-v20.18.3.tar.gz其他发行文件7z/zip 压缩包、headers、node.lib、node_pdb 等位于同一目录对应的 API 文档为nodejs.org/docs/v20.18.3/api/。SHASUMS 签名校验发布博客末尾附带了由 Node.js Release 团队 GPG 私钥签名的SHASUMS256.txt.ascPGP 签名消息。推荐校验流程# 1. 下载签名校验文件与目标制品 curl -fsSO https://nodejs.org/dist/v20.18.3/SHASUMS256.txt.asc curl -fsSO https://nodejs.org/dist/v20.18.3/node-v20.18.3-linux-x64.tar.xz # 2. 验证 PGP 签名需先导入 Node.js Release 团队公钥 gpg --verify SHASUMS256.txt.asc # 3. 校验制品哈希是否与清单一致 shasum -a 256 -c SHASUMS256.txt.asc --ignore-missing以下是发布原文中包含的完整校验清单节选关键平台c0f0c72b80a67ef32402fda206b10a101b1c309158d850dbbedc9e751738d300 node-v20.18.3-aix-ppc64.tar.gz 1f15b7ed18a580af31cf32bc126572292d820f547bf55bf9cdce08041a24e1d9 node-v20.18.3-darwin-arm64.tar.gz 78d8a583a983b4818f30b4e96b7458c1a4cf33397e34b08acdae3e5727026030 node-v20.18.3-darwin-arm64.tar.xz ba668f64df9239843fefcef095ee539f5ac5aa1b0fc15a71f1ecca16abedec7a node-v20.18.3-darwin-x64.tar.gz 93a9df19238adfaa289f4784041d03edaf2fdd89fbb247faffca2fe4a1000703 node-v20.18.3-linux-arm64.tar.gz 8a84eb34287db6a273066934d7195e429f57b91686b62fc19497210204a2b3de node-v20.18.3-linux-armv7l.tar.gz 787612cd7a2461b5340fee1406d8f958e9bb9349030189a03d37fc92529d2f74 node-v20.18.3-linux-ppc64le.tar.gz 72156704416f4c32f8eb72e9ee59a0fcacbd972f28b2e05b9c888c7098acd2d2 node-v20.18.3-linux-s390x.tar.gz 9fc3952da39b20d1fcfdb777b198cc035485afbbb1004b4df93f35245d61151e node-v20.18.3-linux-x64.tar.gz 595bcc9a28e6d1ee5fc7277b5c3cb029275b98ec0524e162a0c566c992a7ee5c node-v20.18.3-linux-x64.tar.xz eba088fa562735140b283c7bb33f53e026ccd5febe68c52c5737ef6e577ec874 node-v20.18.3.tar.gz 0674f16f3bc284c11724cd3f7c2a43f7c2c13d2eb7a872dd0db198f3d588c5f2 node-v20.18.3.tar.xz完整清单含全部 Windows 安装器/二进制/PDB 的 sha256与 PGP 签名块请直接查阅 v20.18.3.md 末尾。这类发布博客是如何自动化生成的nodejs.org 仓库内置了一套发布博客生成脚本位于 apps/site/scripts/release-post它把从 changelog 拼文章的繁琐工作自动化版本确定运行node index.mjs [version]未传版本时自动从https://nodejs.org/dist/index.json取最新版本-f/--force可覆盖已存在的文章见 index.mjs 中的parseArgs与RELEASE_EXISTS判断数据抓取fetchDocs并行获取五类素材——changelog 正文从CHANGELOG_V{line}.md按a idv20.18.3锚点截取、作者信息GitHub API并写入GITHUB_OUTPUT供 PR 指派、版本策略正则匹配## 2025-02-10, Version 20.18.3 Iron (LTS)头中的(LTS)、SHASUMSSHASUMS256.txt.asc、下载制品可达性对每个下载链接发 HEAD 请求不可达标记为*Coming soon*模板渲染通过 Handlebars 渲染 template.hbs即frontmatter changelog 正文 下载清单 SHASUMS 代码块的标准结构格式化落盘用 Prettier 格式化后写入pages/en/blog/release/vX.md。下载制品清单本身定义在 downloadsTable.mjs16 个制品模板统一使用%version%占位符并按版本语义化规则裁剪平台例如 16.0.0不发布 Apple Silicon 二进制、 19.9.0不发布 Windows ARM、 23.0.0不再提供 32 位 Windows、 24.0.0移除 ARMv7这也解释了为什么不同历史版本发布文章里的下载清单长度不同。在 nodejs.org 网站上浏览发布记录这些发布 Markdown 会被站点的数据管线消费博客数据生成器 逐行读取每个发布文件的 frontmatter为文章生成[release, year-2025, all]分类与/blog/release/v20.18.3形式的 slug下载页与归档页所需的版本列表由 releaseVersions.mjs 与 majorNodeReleases.mjs 提供后者基于nodevu/core拉取各主版本的发布与支持期数据发布文章的正文渲染走 Post 布局与博客首页en/blog/index.md联动。因此本文解读的 v20.18.3 不仅是 changelog 快照也是整个 nodejs.org 发布信息体系中发布 → 生成 → 展示闭环的输入样例上游社区发布新版本后维护者运行生成脚本产出 Markdown再经数据管线进入站点各页面。升级建议小结推荐升级20.18.3 是 Iron LTS 维护补丁包含根证书更新、ESM 能力稳定化与多项运行时修复worker 崩溃、dgram fd 泄漏、http2 内存泄漏等建议 v20 用户尽快同步升级重点回归项升级后建议回归 HTTPS/TLS 连接受 NSS 3.104 根库影响、ESM 导入 JSON 的场景可去掉实验 flag、以及使用 UDP 与 HTTP/2 的长连接服务验证途径通过上述gpg --verify与shasum -a 256 -c流程确认制品完整性与签名再在 staging 环境完成回归后灰度发布。【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考