将切换 Node
和 npm
版本的常用工具(n
和nvm
),从Cloud_Notes
云笔记迁移到了这里。同时,对于日常遇到的一些问题做相关记录…
一、Node
版本管理
1、n
1.1 MacOS
注意:超出操作权限时,可配合
sudo
使用。
# 全局安装n
$ npm -g install n
$ which n # 检查n是否存在
/usr/local/bin/n
# 安装 node和npm
$ sudo n stable # 安装最新的稳定版
$ sudo n lts # 安装最新的 LTS 版(长期支持版本)
# 安装特定版本
$ sudo n <node-version> # 示例:sudo n 20.19.0
# 罗列node版本
$ n ls # 罗列已安装的node版本
node/10.16.3
node/14.15.4
node/16.14.0
node/18.15.0
node/20.19.0
node/22.14.0
# 每月清理一次旧版本
n prune && npm cache clean --force
切换node版本有两种方式:
第1种:
sudo n xxx
# 切换 node和npm版本 $ sudo n # 交互切换版本:列出已安装的版本列表,通过上下箭头选择已安装的版本,按回车确认 $ sudo n <node-version> # 命令式切换版本:sudo n 22.14.0 # 删除某个node版本 $ sudo n rm <node-version> # 示例: n rm 6.9.1
第2种:提升
xxx用户权限
,省略sudo
仅使用n xxx
(推荐)
# 修复全局 node 管理权限(将当前用户lianpf添加到admin组,避免每次sudo)
sudo chown -R $(whoami):admin /usr/local/n
$ ls -l $(which node)
-rwxr-xr-x@ 1 lianpf admin 82527408 5 13 17:55 /usr/local/bin/node
# 或修改目录所有权为当前用户
$ sudo chown -R $(whoami) /usr/local/n
$ ls -ld /usr/local/n # # 验证权限: 应显示用户为 lianpf
注意: 使用以下(交互式)命令切换版本时,会出现 npm版本没有跟随node版本切换,仅node版本切换成功的情况 (原因是npm是一个公共模块)
# 第1步
$ n
# 第2步,用键盘上下键盘选择版本, 然后回车选中
所以,切换 Node
和 npm
版本时,建议使用 sudo n xxx
命令。
2、nvm
2.1 Linux(Debian)
安装nvm
命令如下:
$ curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash # 将 nvm 脚本安装到的用户帐户
$ source ~/.bashrc # 刷新
更多请参考, 使用 nvm 管理 node 多版本 | Blogs
使用nvm
管理Node
版本,常用命令如下:
$ nvm --versio # 0.39.7
$ nvm list-remote # 列出所有可用的node版本
$ nvm install stable # 安装最新稳定版 node
$ nvm install <version> # 示例:nvm install 18.19.1 安装特定版本的node
$ nvm uninstall <version> # 删除已安装的指定版本
$ nvm ls # 列出本地可用的node版本
v16.20.2
v18.19.1
-> v20.11.1
system
default -> 20.11.1 (-> v20.11.1)
...
$ nvm use <version> # 示例:nvm use 18.19.1 切换使用指定的版本node
$ pnpm -v # 查看node 18.19.1版本下,安装的pnpm版本是多少
$ nvm alias default <version> # 示例:nvm alias default v18.19.1 设置默认版本
$ nvm current # 查看当前使用的node版本
二、Node
常见环境配置
1、执行node、npm、pnpm
命令时都出现Killed: 9
错误
宿主环境:MacOS + Inter处理器。建议参考系统日志(
/var/log/system.log
)排查Killed: 9
的具体触发原因。
问题描述:用户已稳定安一段时间,机子本身全局安装Node,后续使用n
管理node版本,日常使用正常。某日突发使用n切换node版本失败(报错Killed: 9
),重启后node生效。再次使用n切换node,报错重现且node不可用
优化后的问题描述及分析
1.1 问题描述及解决思路
问题描述:
用户已稳定使用n
管理Node.js版本一段时间,日常切换正常。某日突发以下异常:
- i.首次使用
n
切换Node版本时,报错Killed: 9
,切换失败; - ii.重启系统后,Node版本自动生效,但再次尝试用
n
切换版本时,报错重现且Node彻底不可用(无法执行任何命令)。
潜在原因与解决方案:
原因1:权限冲突或路径锁定。
n
在切换版本时需要修改系统路径中的Node可执行文件,若存在其他进程占用Node或权限不足(如系统更新后权限重置),可能导致操作被强制终止(Killed: 9
常见于macOS权限保护机制)- 解决方案:
# 检查Node安装路径权限,确保用户对路径有读写权限 $ ls -l $(which node) # 如:输出 -rwxr-xr-x@ 1 lianpf admin 82527408 5 13 17:55 /usr/local/bin/node,表示用户lianpf、admin有读写权限 # 尝试通过 sudo n 切换版本(谨慎操作,避免破坏依赖关系);
- 解决方案:
原因2:缓存或版本残留干扰。全局版本
node
文件和n
切换的node
文件路径产生了冲突,重启后生效可能是系统临时加载了正确的环境变量,短暂绕过缓存问题。但再次切换时n
时,又回到了这个问题。- 解决方案:
- 确认环境变量配置:
- 确认
n
的默认路径:检查~/.bashrc
或~/.zshrc
中的N_PREFIX
变量是否指向实际Node安装目录(如export N_PREFIX=/usr/local
) - 更新环境变量:执行
source ~/.bashrc
或重启终端
- 确认
- 清除缓存或版本残留干扰
- 清理npm缓存:运行
npm cache clean --force
- 删除
n
的版本缓存:移除~/.n/versions
中异常版本文件夹
- 清理npm缓存:运行
- 确认环境变量配置:
- 解决方案:
总之:避免混合使用版本管理工具。 统一使用 n 或 nvm,不要与 Homebrew 交叉操作。若需用 Homebrew 管理 Node,建议彻底卸载 n 并清理残留文件
1.2 落地的解决方案
第1步:卸载node
和n
$ which node
/usr/local/bin/node
# 手动清理冲突文件(Node)
$ rm -rf /usr/local/bin/node
# 重建目录并修复权限
$ sudo mkdir /usr/local/bin/node /usr/local/bin/npm
$ sudo chown -R $(whoami) /usr/local/bin/node
# 清理n
$ which n
/usr/local/bin/n
$ brew uninstall n
$ brew cleanup -s node # 清理 Homebrew 残留
$ n prune # 删除 n 安装的旧版本
第2步:安装n
和node
,提升node
管理权限
# 安装n和node
$ brew install n
$ n <version> # n 20.19.0
$ s -l /usr/local/bin/node # 验证:应指向 /usr/local/n/versions/node/20.19.0/bin/node
% node -v # 应输出 v20.19.0
$ npm -v # 应输出 10.8.2
$ which node # 应显示 /usr/local/bin/node
# 调整环境变量优先级 - 确保 n 安装的 Node 路径优先级高于 Homebrew,避免路径冲突
$ echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc
# 修复全局 node 管理权限(将当前用户lianpf添加到admin组,避免每次sudo)
sudo chown -R $(whoami):admin /usr/local/*
$ ls -l $(which node) # 验证权限
-rwxr-xr-x@ 1 lianpf admin 82527408 5 13 17:55 /usr/local/bin/node
参考
最后, 希望大家早日实现:成为编程高手的伟大梦想!
欢迎交流~

本文版权归原作者曜灵所有!未经允许,严禁转载!对非法转载者, 原作者保留采用法律手段追究的权利!
若需转载,请联系微信公众号:连先生有猫病,可获取作者联系方式!