nvm踩坑记录--nvm 切换node版本 node -v却不是切换的版本
现象:
终端输入:nvm use 16.15.0
终端输出:Now using node v16.15.0 (npm v8.5.5)
终端输入: node -v
终端输出:23.9.0
显然不对呀,生效了又没有生效。
我怀疑mac自己有自带的node版本
输入 which node 后输出 /opt/homebrew/bin/node 也不是自带的node
那我就问了下deepseek
为什么 nvm
切换版本后仍然显示 Homebrew 的 Node.js?
下面是deepseek的解答
主要解决就是环境变量改了下
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" export PATH="$NVM_DIR/versions/node/$(nvm current)/bin:$PATH"
下面是解释:
-
这是因为 Homebrew 的路径在
PATH
环境变量中优先级高于nvm
管理的路径。 -
你可以通过以下命令查看
PATH
的内容:sh:echo $PATH
如果
/opt/homebrew/bin
或/usr/local/bin
出现在~/.nvm/versions/node
前面,node
命令会优先指向 Homebrew 安装的版本。
4. 如何解决这个问题?
方法 1:调整 PATH
环境变量
-
确保
nvm
管理的 Node.js 路径优先级高于 Homebrew 的路径。可以在你的 shell 配置文件(如~/.zshrc
或~/.bashrc
)中添加以下内容:sh
:
export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" export PATH="$NVM_DIR/versions/node/$(nvm current)/bin:$PATH"
-
然后重新加载配置文件:
sh
source ~/.zshrc # 或 source ~/.bashrc
方法 2:卸载 Homebrew 安装的 Node.js
-
如果你不需要 Homebrew 安装的 Node.js,可以直接卸载它:
sh
brew uninstall node
-
卸载后,
which node
应该会指向nvm
管理的 Node.js。
方法 3:屏蔽 Homebrew 的 Node.js
-
如果你不想卸载 Homebrew 安装的 Node.js,可以通过以下命令屏蔽它:
sh
复制
brew unlink node
-
这样 Homebrew 的 Node.js 将不会被加载,
nvm
管理的版本会生效。
方法 4:检查 nvm
的默认版本
-
确保你已经为
nvm
设置了默认的 Node.js 版本:sh
复制
nvm alias default <version>
例如:
sh
复制
nvm alias default 18.0.0
5. 验证是否解决
-
运行以下命令检查当前使用的 Node.js 版本和路径:
sh
复制
node -v which node
-
如果输出显示的是
nvm
管理的版本(例如~/.nvm/versions/node/v18.0.0/bin/node
),说明问题已解决。