跳转到内容
搜索 CentOS Stream 文档

    浏览当前文档目录

    安装 Node.js 并切换模块流版本

    适用: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 一条都没启用。本页把这两层来源讲清楚并给出切换步骤。

    看默认安装会装到什么
    $ sudo dnf install nodejs --assumeno

    预期输出(关键行,实测摘录):

    nodejs aarch64 1:16.20.2-8.el9 appstream 112 k

    16.20.2 来自 AppStream 的非模块包。而模块化层里其实有多条流:

    查看 nodejs 模块流
    $ dnf module list nodejs

    预期输出(实测摘录,2026-11-01):

    Name Stream Profiles Summary
    nodejs 18 common [d], development, … Javascript runtime
    nodejs 20 common [d], development, … Javascript runtime
    nodejs 22 common [d], development, … Javascript runtime
    nodejs 24 common [d], development, … Javascript runtime
    nodejs 26 common [d], development, … Javascript runtime

    注意:[d] 标记的是每条流的默认 profile,不代表该流已启用。没有任何流处于 enabled 状态时,dnf 会落回那个非模块的 16.x 包——这就是默认安装装到旧版的机制。

    切换到新版本:先清旧包,再启用流

    Section titled “切换到新版本:先清旧包,再启用流”
    切换到 Node.js 22(完整顺序)
    $ 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 与来源
    $ 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