安装 Node.js 并切换模块流版本
This content is not available in your language yet.
适用:CentOS Stream 9 / 10 · 核对日:2026-11-01 · 官方依据:仓库内包与模块元数据,容器实测(Stream 9 镜像 sha256:4fdfb36…,dnf 4.14.0;Stream 10 stream10 镜像,dnf 4.20.0)。
Stream 9 上装 Node.js 有一个实测可见的坑:直接 dnf install nodejs 装到的是 16.20.2(已 EOL 的老版本),而模块流里的 18–26 一条都没启用。本页把这两层来源讲清楚并给出切换步骤。
现象:默认安装装到 16.x
Section titled “现象:默认安装装到 16.x”$ sudo dnf install nodejs --assumeno预期输出(关键行,实测摘录):
nodejs aarch64 1:16.20.2-8.el9 appstream 112 k16.20.2 来自 AppStream 的非模块包。而模块化层里其实有多条流:
$ dnf module list nodejs预期输出(实测摘录,2026-11-01):
Name Stream Profiles Summarynodejs 18 common [d], development, … Javascript runtimenodejs 20 common [d], development, … Javascript runtimenodejs 22 common [d], development, … Javascript runtimenodejs 24 common [d], development, … Javascript runtimenodejs 26 common [d], development, … Javascript runtime注意:[d] 标记的是每条流的默认 profile,不代表该流已启用。没有任何流处于 enabled 状态时,dnf 会落回那个非模块的 16.x 包——这就是默认安装装到旧版的机制。
切换到新版本:先清旧包,再启用流
Section titled “切换到新版本:先清旧包,再启用流”$ sudo dnf remove nodejs nodejs-libs 'nodejs-*' 2>/dev/null$ sudo dnf module enable -y nodejs:22$ sudo dnf install nodejs$ node --version预期输出:
v22.23.2实测中 enable nodejs:22 后重新 dnf install nodejs,解析目标变为 nodejs-1:22.23.2-1.module_el9+…(模块包)。切回其它版本同理:先移除已装的 nodejs,module enable nodejs:<版本>,再装。
Stream 10:没有模块流,只有普通包
Section titled “Stream 10:没有模块流,只有普通包”Stream 10 上 dnf install nodejs 直接得到 22.22.0(非模块包),dnf module list 输出为空、dnf 4.20.0 打出 modularity 弃用警告。module enable nodejs 这类命令在 Stream 10 上必然报 missing groups or modules。
需要 Stream 10 之外的 Node 大版本时,用上游发行渠道(NodeSource 仓库、官方二进制包)或 nvm/fnm 这类版本管理器;用第三方仓库时注意它与 dnf 的优先级配置,参考仓库与滚动内容。
$ node --version$ rpm -q --qf '%{NAME}-%{VERSION} (%{RELEASE})\n' nodejs回滚到系统默认(Stream 9):
$ sudo dnf remove nodejs nodejs-libs$ sudo dnf module reset -y nodejs$ sudo dnf install nodejs # 又回到 16.20.2(非模块)module reset 清掉启用/安装状态标记,让模块层回到未启用。
| 现象 | 原因 | 处理 |
|---|---|---|
| 装完还是 16.x | 没启用模块流或没先移除非模块包 | 按上面「先清旧包,再启用流」顺序执行 |
module enable 报 missing groups or modules | 在 Stream 10 上执行(无模块化) | 用普通包或上游发行渠道 |
| node 与 npm 版本不配套 | 混装了不同来源的包 | 全部移除后按单一来源重装 |
| 全局 npm 包丢失 | 移除 nodejs 时一并被清 | 切流后重新 npm install -g |
- Python 安装与选择 — 并行版本包 vs 模块流(Stream 10 无模块)
- 仓库与滚动内容 — 模块流在仓库层的位置
- 报错速查 —
missing groups or modules的处理 - 官方:CentOS Stream 文档