Node.js 18.12.0(LTS)发布全解析:18.x 正式进入“Hydrogen”长期支持周期
【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org
Node.js v18.12.0 是 18.x 发布线首个被标记为 Long Term Support(LTS)的版本,代号 “Hydrogen”。本篇技术指南基于 nodejs.org 官网仓库中的正式发布公告,完整梳理该版本的 LTS 里程碑意义、全平台安装包清单、PGP 签名 SHASUMS 校验流程,并结合仓库源码揭示这类发布博文在 nodejs.org 站点中的自动生成机制与版本状态数据模型,帮助你准确理解 LTS 生命周期并安全地完成升级与二进制校验。
版本背景:18.x 进入 LTS 的里程碑节点
v18.12.0 发布于 2022 年 10 月 25 日,由 Ruy Adorno 与 Rafael Gonzaga 署名发布,归档于 apps/site/pages/en/blog/release/v18.12.0.md(frontmatter 中category: release、layout: blog-post)。该版本的核心意义不在于新增多少 API,而在于它标志着 Node.js 18.x 发布线正式从 Current 阶段转入长期支持:
- Active LTS:从本版本起持续到 2023 年 10 月;
- Maintenance(维护期):2023 年 10 月之后转入,直至 2025 年 4 月完全 End-Of-Life(EOL)。
这背后是 Node.js 固定的发布节奏:偶数大版本进入 LTS,奇数大版本保持 Current。仓库中的 关于 EOL 的说明页 明确解释了这一机制:大版本按可预测的时间表发布、打补丁并最终被标记 EOL;一旦某个发布线到达 EOL,项目将不再为其提供任何更新,包括安全补丁。
在 nodejs.org 站点的数据层,这种状态判定被建模为源码中的状态机。next-data/generators/releaseData.mjs 中的getNodeReleaseStatus逻辑如下:
const getNodeReleaseStatus = (latest, eol) => { const now = new Date(); if (eol && now >= new Date(eol)) { return 'EOL'; } if (latest.lts.isLts) { return 'LTS'; } return 'Current'; };也就是说,一个版本线只有当其支持计划中的 EOL 日期已过才会被标记为 EOL;只要该线最新的版本是 LTS 版本,就标记为 LTS;否则为 Current。数据来源于nodevu(见 majorNodeReleases.mjs),并会过滤掉没有文档化支持计划的版本。这张状态表被 EOLReleaseTable 等组件消费,用于渲染 EOL 版本表格。
官方下载工件清单(v18.12.0 全平台)
v18.12.0 发布公告按平台列出了官方分发的全部工件,所有文件均托管在 Node.js 官方发行目录https://nodejs.org/dist/v18.12.0/下:
| 平台 | 工件 | 下载地址 |
|---|---|---|
| Windows | 32 位安装器(MSI) | https://nodejs.org/dist/v18.12.0/node-v18.12.0-x86.msi |
| Windows | 64 位安装器(MSI) | https://nodejs.org/dist/v18.12.0/node-v18.12.0-x64.msi |
| Windows | 32 位二进制 | https://nodejs.org/dist/v18.12.0/win-x86/node.exe |
| Windows | 64 位二进制 | https://nodejs.org/dist/v18.12.0/win-x64/node.exe |
| macOS | 64 位安装器(pkg) | https://nodejs.org/dist/v18.12.0/node-v18.12.0.pkg |
| macOS | Apple Silicon 二进制 | https://nodejs.org/dist/v18.12.0/node-v18.12.0-darwin-arm64.tar.gz |
| macOS | Intel 二进制 | https://nodejs.org/dist/v18.12.0/node-v18.12.0-darwin-x64.tar.gz |
| Linux | 64 位二进制 | https://nodejs.org/dist/v18.12.0/node-v18.12.0-linux-x64.tar.xz |
| Linux | PPC LE 64 位二进制 | https://nodejs.org/dist/v18.12.0/node-v18.12.0-linux-ppc64le.tar.xz |
| Linux | s390x 64 位二进制 | https://nodejs.org/dist/v18.12.0/node-v18.12.0-linux-s390x.tar.xz |
| AIX | 64 位二进制 | https://nodejs.org/dist/v18.12.0/node-v18.12.0-aix-ppc64.tar.gz |
| Linux | ARMv7 32 位二进制 | https://nodejs.org/dist/v18.12.0/node-v18.12.0-linux-armv7l.tar.xz |
| Linux | ARMv8 64 位二进制 | https://nodejs.org/dist/v18.12.0/node-v18.12.0-linux-arm64.tar.xz |
| 任意 | 源码包 | https://nodejs.org/dist/v18.12.0/node-v18.12.0.tar.gz |
此外,全部发行文件位于https://nodejs.org/dist/v18.12.0/,对应版本的 API 文档位于https://nodejs.org/docs/v18.12.0/api/。
需要留意的是,这份清单是按版本时代动态变化的。仓库中的 scripts/release-post/downloadsTable.mjs 用%version%占位符构造下载模板,并按 semver 规则裁剪平台:
- 版本
< 16.0.0:不提供 macOS Apple Silicon 二进制; - 版本
< 19.9.0:不提供 Windows ARM 64 位安装器与二进制(因此 v18.12.0 时代没有 Windows ARM 工件); - 版本
>= 23.0.0:移除 Windows 32 位工件; - 版本
>= 24.0.0:移除 ARMv7 32 位二进制。
这也是为什么 v18.12.0 公告中恰好包含 Windows x86/x64、macOS Apple Silicon/Intel、Linux x64/ppc64le/s390x/armv7l/arm64、AIX 与源码共 16 类工件。
SHASUMS 与二进制签名校验
发布公告中随附的SHASUMS块是 Node.js 发行安全体系的关键部分。它来自发行目录下的SHASUMS256.txt.asc文件:前半部分是每个工件文件的 SHA-256 校验和,后半部分是用 Node.js 发布私钥进行的 PGP 签名,用于防篡改。
校验和核对
下载任意工件后,可以用系统自带工具独立计算其 SHA-256 并与公告比对。例如在 Linux/macOS 上:
shasum -a 256 node-v18.12.0-linux-x64.tar.xz # 期望输出:9429e26d9a35cb079897f0a22622fe89ff597976259a8fcb38b7d08b154789dcPGP 签名验证
更为严格的做法是验证签名本身,确保校验和文件确实由 Node.js 官方发布。流程大致为:
- 从官方渠道获取 Node.js 发布公钥并导入 GPG 密钥环;
- 下载
SHASUMS256.txt.asc并验证签名:gpg --verify SHASUMS256.txt.asc - 验证通过后,再用
shasum -a 256 -c SHASUMS256.txt.asc等命令批量比对所有下载文件的校验和。
下载页面 中也明确引导用户“学习如何验证签名的 SHASUMS”,并将其列为下载源码包之前的安全步骤。
以下是 v18.12.0 官方公告中随附的完整签名校验和清单(节选关键工件,完整文件见 v18.12.0.md 原文):
10b1f6ffd3a10fc33e497ea66019a5f66b748c1f8767fcb22cd3c365b5c30b64 node-v18.12.0-aix-ppc64.tar.gz 7aa5ef109086be0adf433b851504f0522a71a02c6d675e729375cd591a854f3c node-v18.12.0-darwin-arm64.tar.gz e0e830f859ee20f53c830f1ad86477defee79f87915976cbee14caf6204bbf16 node-v18.12.0-darwin-x64.tar.xz 0699c8e02581a9c312d7157331561d36ef23963766eb47daa702edb6fd6735bd node-v18.12.0-linux-x64.tar.gz 9429e26d9a35cb079897f0a22622fe89ff597976259a8fcb38b7d08b154789dc node-v18.12.0-linux-x64.tar.xz 83a0e2246c4f1b33e37b995b479137d14fc3cfc184cc3f798e41a8a4cca1da85 node-v18.12.0.pkg 1fbb44d083ec11d0c208535dac4fb33f9dff7360bbf4b127dd2b9808f3e41106 node-v18.12.0.tar.gz 73a7f01e2999eb197763ced666a6cd544ad580eaefb73e0a849603b3e804f42e node-v18.12.0.tar.xz 5c9443cc6213f88a9c702b995f04b86cda78f01f47f251ce46b7567e1197a59c node-v18.12.0-x64.msi 8a6e8ec6e6a51d1d98052943dd324d0ac53a0f07185d9d7c7ea7c43b3b764a6b node-v18.12.0-x86.msi这类发布公告在 nodejs.org 仓库中是如何生成的
v18.12.0.md 并非纯手写文档,而是由仓库内置的发布博文生成脚本产出。理解这条自动化流水线,能让你读懂发布公告的结构规律,也能作为自行维护类似发布站点的参考。
生成脚本入口
apps/site/scripts/release-post/index.mjs 是一个可直接执行的 CLI 工具,用法为:
node index.mjs [version]- 传入版本号时,针对指定版本生成;省略时,脚本会从
https://nodejs.org/dist/index.json自动抓取最新版本号(对应源码中的findLatestVersion); - 支持
--force/-f参数覆盖已存在的博文(默认遇到已存在文件会报错,见ERRORS.RELEASE_EXISTS); - 输出文件写入
../../pages/en/blog/release/vX.md,即本仓库的 apps/site/pages/en/blog/release 目录,目前该目录下已有 800+ 篇历代版本公告。
生成过程通过fetchDocs并行抓取四类数据:
- Changelog 主体:从 Node.js 主仓库的
CHANGELOG_V{主版本}.md中按<a id="版本号"></a>锚点截取对应版本段落,并把*列表符号规范化为-; - 发布作者:从 changelog 头部(如
## 2022-10-25, Version 18.12.0 'Hydrogen' (LTS), @ruyadorno)解析出@author,再调用 GitHub API 获取作者展示名; - 版本策略:通过正则
/^## ?\d{4}-\d{2}-\d{2}, Version [^(].*\(([^)]+)\)/从 changelog 标题中提取LTS、Current等策略标签; - SHASUMS:直接抓取
https://nodejs.org/dist/v{version}/SHASUMS256.txt.asc原文;下载不可用时会以[INSERT SHASUMS HERE]占位,等待人工补充。
此外verifyDownloads会逐个对下载表里的 URL 发HEAD请求做存活探测,失败的标记为*Coming soon*。
模板结构
scripts/release-post/template.hbs 是渲染用的 Handlebars 模板,定义了发布公告的标准骨架:
--- date: '{{date}}' category: release title: Node.js {{version}} ({{versionPolicy}}) layout: blog-post author: {{author}} --- {{changelog}} {{#files}} {{.}} \ {{/files}} Other release files: https://nodejs.org/dist/v{{version}}/ \ Documentation: https://nodejs.org/docs/v{{version}}/api/ ### SHASUMS{{shasums}}
对照 v18.12.0.md 可以看到完全一致的产物:frontmatter 中date/category/title/layout/author五个字段、Changelog 正文、以反斜杠续行的下载清单、### SHASUMS区块。v18.12.0 公告中的### Notable Changes段落正是 changelog 截取下来的正文部分——它简明点明了本版本最重要的信息:18.x 进入 LTS(Hydrogen)。
最终渲染出的文本还会经过 Prettier(markdown 解析器)格式化,再落盘到版本目录。
下载页与版本状态如何联动
官网下载页 apps/site/pages/en/download/index.mdx 使用Release.VersionDropdown、Release.ReleaseCodeBox、Release.PrebuiltDownloadButtons等组件,让用户按操作系统、架构、安装方式与包管理器选择对应的安装命令或预编译二进制;并链接到 changelog 与对应版本的发布博文,便于在下载前核对版本变更。页面还引导用户了解 Node.js 发布计划 与 LTS 状态。
在数据层,next-data/generators/releaseVersions.mjs 会聚合所有主版本下的全部 release 版本号(如v18.12.0),供版本下拉框与历史归档页使用;releaseData.mjs 则负责把每个版本的 modules 版本、npm 版本、V8 版本、发布日期等元数据与EOL / LTS / Current状态一并提供给前端渲染。也就是说,你在官网看到的“18.12.0 属于 LTS 线”这一标注,其依据就是这套从 nodevu 到状态机的数据链路,与发布公告中“Active LTS / Maintenance / EOL”的时间表一一对应。
实践要点小结
围绕 v18.12.0 这个里程碑版本,可以沉淀出几条可直接落地的实践:
- 升级时机:18.x 线自 v18.12.0 起进入 Active LTS(至 2023 年 10 月),随后转入 Maintenance 直至 2025 年 4 月 EOL。在 EOL 页面 中可以看到 EOL 版本不再获得任何安全补丁,因此生产环境应尽量停留在 Active LTS 窗口内并制定升级路线;
- 下载安全:始终优先使用官方发行目录中的工件,并通过 SHASUMS 的 SHA-256 校验与 PGP 签名验证两道工序确认文件完整性与来源可信;
- 版本认知:发布公告的工件清单随版本时代变化(例如 Windows ARM 工件自 19.9.0 起才出现、32 位工件自 23.0.0 起移除),判断某个版本“应该提供哪些安装包”时可参考 downloadsTable.mjs 的 semver 过滤规则;
- 发布自动化:nodejs.org 用一条「抓取 changelog → 解析作者与策略 → 探测下载链接 → 渲染模板 → Prettier 格式化 → 落盘」的流水线批量产出发布博文,index.mjs 中每一步都对应清晰的错误类型与回退逻辑,可作为发布内容自动化的参考实现。
【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考