Node.js 环境与包管理工作流

太阳作者太阳
原创内容采用 CC-4.0 协议发布,转载请注明出处
Node.jsNVMnpmYarn镜像

我平时用 NVM 管理 Node.js 版本,项目依赖主要交给 npm,有些旧项目还在用 Yarn。这篇就把我实际用过的安装和配置命令收在一起,免得换机器时再到处找。

使用 NVM 管理 Node.js

我在 macOS 和 Linux 上用 NVM 安装、切换 Node.js。现在笔记里留的是这个安装版本:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash

不想重启终端,就直接在当前 shell 加载:

\. "$HOME/.nvm/nvm.sh"

我一般只装 LTS,然后把它设成默认版本:

nvm install --lts
nvm use --lts
nvm alias default 'lts/*'

环境不对时,我先看版本和命令到底落在哪里:

node --version
npm --version
command -v node
command -v npm

NVM 切换 Node.js 后,npm 和全局包目录也会跟着变。碰到“明明装过,命令却找不到”,我先看当前用了哪个 Node.js,不先折腾系统目录权限。

npm 配置

查看当前配置

改配置前,我先看看现在实际用了什么:

npm config get registry
npm config get cache
npm config get prefix
npm config list

npm 会从项目、用户和全局几层读取 .npmrc。机器上的镜像和路径配置,我放在用户配置里,不塞进每个项目。

配置 registry

我现在把 npm registry 统一设成阿里的 npmmirror:

npm config set registry http://registry.npmmirror.com

对应的 .npmrc 写法:

registry=http://registry.npmmirror.com

腾讯云以前用起来很快,但现在明显慢了。华为云我也试过,一直有点抽风,所以最后统一到了这个地址。下载速度突然不对时,我先跑 npm config get registry,免得查半天才发现源被别的配置改了。

配置全局安装与缓存目录

以前我还单独改过 npm 的全局安装目录和缓存目录。换机器时把占位符换成实际路径:

npm config set prefix "<NPM_PREFIX>"
npm config set cache "<NPM_CACHE>"

也可以直接写进 .npmrc

prefix=<NPM_PREFIX>
cache=<NPM_CACHE>

改过 prefix 以后,还得把对应的可执行文件目录加进 PATH,不然包虽然装上了,命令还是找不到。现在既然用了 NVM,我一般不再额外覆盖 prefix,不想把几套 Node.js 的全局目录搅在一起。

把 npm 12 降回 Node.js 24 自带版本

我遇到过一次很直接的兼容问题:Node.js 还是 v24.18.0,npm 却已经升级到了 12.0.1,一些旧项目安装依赖时开始报错。

先确认当前版本和实际执行文件:

node --version
npm --version
where.exe node
where.exe npm

当时的输出是:

v24.18.0
12.0.1
C:\Program Files\nodejs\node.exe
C:\Program Files\nodejs\npm
C:\Program Files\nodejs\npm.cmd

Node.js 官方版本页显示,v24.18.0 安装包附带的是 npm 11.16.0。要把 npm 单独降到这个版本,可以执行:

npm install --global npm@11.16.0

不过 Windows 有一个容易忽略的路径问题。Node.js 安装包里的 npm 位于 C:\Program Files\nodejs,全局安装的 npm 默认位于 %AppData%\npm。如果前者排在 PATH 前面,上面的命令虽然安装成功,npm --version 仍可能显示 12.0.1。

安装后先关闭终端,重新打开 PowerShell,再检查:

where.exe npm
npm --version

如果 where.exe npm 仍然先显示 C:\Program Files\nodejs\npm.cmd,我不继续手工覆盖这个目录。既然目标就是恢复 Node.js 自带版本,最稳妥的处理是重新运行 Node.js v24.18.0 的官方 MSI 安装程序。安装完成后再次打开终端,结果应该是:

v24.18.0
11.16.0

使用 NVM for Windows 管理 Node.js 时,可以重新安装并切换同一个 Node.js 版本,让 npm 随 Node.js 一起恢复。不要为了降 npm 顺手删除项目的 node_modules 或锁文件;npm 自身的版本问题和项目依赖状态是两件事。

检查和清理 npm 缓存

npm 缓存自己会做校验,我平时先跑:

npm cache verify

真碰到缓存异常,再强制清掉:

npm cache clean --force

Yarn Classic 配置

有些旧项目还在用 Yarn,我是通过 npm 全局安装的:

npm install --global yarn
yarn --version

这套命令对应 Yarn Classic。registry 现在也统一指向 npmmirror:

yarn config set registry http://registry.npmmirror.com

确认当前地址:

yarn config get registry

需要重新拉依赖时,我会顺手清一下 Yarn 缓存:

yarn cache clean

我现在的习惯

  • 一个项目用哪套包管理器,就只留对应的锁文件。我不在 npm 和 Yarn 之间来回切。
  • registry、代理、缓存和全局目录分开查,不一次全改,不然最后也不知道是哪项起了作用。
  • 现在 npm 和 Yarn 都用 http://registry.npmmirror.com。腾讯云以前快、现在慢,华为云又总抽风,暂时不再来回换。

参考资料