Mac系统优先调用/usr/local/bin/node而非nvm版本 需删除系统node吗
解答
不建议直接删除 /usr/local/bin/node 路径下的系统版本Node,优先排查shell路径优先级问题,这是导致该问题的核心诱因。
nvm的实现逻辑是在你的shell配置文件中注入自身执行路径,并将其放到PATH环境变量的最前列,优先级高于系统默认的/usr/local/bin路径,从而优先调用nvm管理的Node版本。你遇到的问题大概率是nvm的初始化脚本未正确加载,或路径顺序配置错误,按照以下步骤排查即可解决:
- 首先确认当前使用的shell类型,执行命令:
echo $SHELL
输出为/bin/zsh对应zsh shell,输出为/bin/bash对应bash shell - 检查对应shell的配置文件是否存在nvm初始化代码:
- zsh对应配置文件为
~/.zshrc,bash对应配置文件为~/.bash_profile或~/.bashrc - 打开配置文件,确认是否存在以下初始化代码,没有的话手动添加到文件末尾:
export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" - zsh对应配置文件为
- 重载shell配置使修改生效:
zsh执行:source ~/.zshrc
bash执行:source ~/.bash_profile - 执行
which node验证,正常已经指向~/.nvm路径下的对应Node版本
如果完成上述操作后仍然调用系统版本Node,可选择以下两种方案处理系统Node,无需直接删除避免影响依赖系统版本的旧程序:
- 重命名系统Node,后续需要使用时可以直接调用重命名后的命令:
sudo mv /usr/local/bin/node /usr/local/bin/node-system sudo mv /usr/local/bin/npm /usr/local/bin/npm-system - 确认没有依赖系统Node的程序后,再执行删除操作:
sudo rm /usr/local/bin/node /usr/local/bin/npm
注意删除前建议导出系统Node安装的全局包列表,避免依赖丢失。
内容的提问来源于stack exchange,提问作者Macilias
相关产品推荐
相关产品推荐

