将切换 Nodenpm 版本的常用工具(nnvm),从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步,用键盘上下键盘选择版本, 然后回车选中

所以,切换 Nodenpm 版本时,建议使用 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 中异常版本文件夹

总之:避免混合使用版本管理工具​​。 统一使用 n 或 nvm,不要与 Homebrew 交叉操作。若需用 Homebrew 管理 Node,建议彻底卸载 n 并清理残留文件

1.2 落地的解决方案

第1步:卸载noden

$ 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步:安装nnode,提升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

参考


最后, 希望大家早日实现:成为编程高手的伟大梦想!
欢迎交流~

微信公众号

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