在 Fedora 上安装 Node.js:22 LTS 与 npm 全局目录的坑
Fedora 的 Node.js 来自发行版仓库,版本跟着 Fedora 走,不是最新版——这正是它稳定的原因。
sudo dnf install nodejs npmF45 实测:
nodejs-22.23.1-4.fc45.x86_64验证:
node -vnpm -vv22.23.110.9.8跑一行确认 V8 也正常:
node -e "console.log(process.versions.v8)"12.4.254.21-node.56npm 全局目录在哪(重要)
Section titled “npm 全局目录在哪(重要)”npm config get prefix/usr/local这意味着 npm install -g 会往 /usr/local/lib/node_modules 写,需要 sudo:
sudo npm install -g pnpm把全局目录改到用户目录
Section titled “把全局目录改到用户目录”mkdir -p ~/.npm-globalnpm config set prefix ~/.npm-globalecho 'export PATH=$HOME/.npm-global/bin:$PATH' >> ~/.bashrcsource ~/.bashrc之后 npm install -g 不再需要 sudo:
npm install -g pnpmpnpm -v这条命令会把 ~/.npmrc 写出来,重装系统后记得一起备份。
mkdir -p ~/hello && cd ~/hellonpm init -ynode -e "console.log('node', process.version)"装依赖、起服务:
npm install expresscat > server.js <<'EOF'const express = require('express');const app = express();app.get('/', (req, res) => res.send('ok from ' + process.version));app.listen(3000, () => console.log('listening on 3000'));EOFnode server.js另开一个终端:
curl -s http://127.0.0.1:3000/多版本:Fedora 原生就有 22 / 24 / 26
Section titled “多版本:Fedora 原生就有 22 / 24 / 26”这是 Fedora 上最容易被忽略的一点——不需要 nvm,仓库里就并装多个 Node:
sudo dnf install nodejs24 nodejs26装完 /usr/bin 里会出现带版本后缀的可执行文件:
ls /usr/bin | grep -E "^node"nodenode-22node-24node-26各自报版本:
node -v # v22.23.1 ← 默认node-24 -v # v24.18.0node-26 -v # v26.3.1npm 也一样:
ls /usr/bin | grep -E "^npm"npmnpm-22npm-24npm-26它们共享同一个全局 prefix(/usr/local),但各自的 npm-24 install -g 会解析到 24 的 node。
| 包名 | 提供的二进制 | 实测版本 |
|---|---|---|
nodejs(默认) | node、node-22 | v22.23.1 |
nodejs24 | node-24 | v24.18.0 |
nodejs26 | node-26 | v26.3.1 |
什么时候还需要 nvm:要 非整数大版本(比如 16.20.2)、要频繁切换且不想记后缀、或者要 EOL 版本(14/16)。Fedora 只提供当前受支持的几个大版本。
需要别的 Node 版本
Section titled “需要别的 Node 版本”Fedora 仓库只给一个版本(F45 是 22)。要 20 或 18:
| 方式 | 适用 |
|---|---|
dnf install nodejs22 之类的版本化包 | 仓库里有对应版本时最省事 |
容器:podman run --rm node:20 node -v | 跑构建、跑测试 |
| nvm | 开发机多版本切换 |
dnf search nodejs | grep -E "^nodejs[0-9]+" # 看有没有版本化包podman run --rm node:20-alpine node -v不建议用第三方源(NodeSource 等)覆盖系统 nodejs——下次 dnf upgrade 容易出现文件冲突。
| 现象 | 原因 |
|---|---|
npm install -g 报 EACCES | 全局目录 /usr/local 属 root,改 prefix 或加 sudo |
command not found: node | 只装了 nodejs 但 PATH 未刷新,重开 shell |
| 项目要求 Node ≥ 某版本 | 仓库版本跟不上,用容器或 nvm |
| 全局包装了却找不到命令 | prefix 改了但 PATH 没加 ~/.npm-global/bin |
- 工具链与多版本共存 — Node 之外的语言多版本
- 容器与 rootless — 用容器固定 Node 版本
- 防火墙 firewalld — 放行服务端口
- 仓库与 dnf5 — 装包基础
- 官方:Node.js