解决 iTerm2 中 nvm 不生效的问题(Mac 环境)

解决 iTerm2 中 nvm 不生效的问题(Mac 环境)

标题

《为什么 iTerm2 无法使用 nvm?—— 解决 Mac 终端环境变量冲突指南》


问题描述

许多开发者在 Mac 上使用 nvm 管理 Node.js 版本时,发现:

  • 原生终端nvmnpmpnpm 等工具正常工作。
  • iTerm2:只有 git 和全局安装的 node v20 可用,其他工具(如 nvm)无法识别。

典型报错

➜  ~ nvm ls
zsh: command not found: nvm

➜  ~ which node
/usr/local/bin/node  # 不是 nvm 管理的路径

线索分析

通过以下线索定位问题:

  1. Shell 类型
    echo $SHELL
    # 输出 /bin/zsh(说明使用 zsh)
    
  2. Node.js 路径
    which node
    # 输出 /usr/local/bin/node(非 nvm 管理路径)
    
  3. 环境变量冲突
    • nvm 未被加载到 Shell 配置中。
    • 全局安装的 node 优先于 nvm 管理的版本。

解决方法

1. 卸载全局 Node.js(避免冲突)

# 通过 Homebrew 卸载
brew uninstall --force node# 或手动删除
sudo rm -rf /usr/local/bin/{node,npm,npx} /usr/local/lib/node_modules

2. 确保 nvm 正确安装与加载

(1) 检查 nvm 是否已安装
ls ~/.nvm
# 应显示 nvm 目录
(2) 在 ~/.zshrc 中加载 nvm

编辑 ~/.zshrc 文件,确保包含以下内容:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # 加载 nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # 自动补全

保存后重新加载配置:

source ~/.zshrc

3. 通过 nvm 重新安装 Node.js

nvm install 20      # 安装最新 Node.js 20 版本
nvm use 20          # 切换到该版本
nvm alias default 20  # 设为默认版本

4. 检查 PATH 优先级

确保 nvm 路径优先于 /usr/local/bin

echo $PATH
# 正确顺序示例:/Users/xxx/.nvm/...:/usr/local/bin:...

若顺序错误,在 ~/.zshrc 最前面添加:

export PATH="$HOME/.nvm/versions/node/v20.x.x/bin:$PATH"

重新加载配置:

source ~/.zshrc

5. 验证修复结果

nvm --version       # 显示 nvm 版本
nvm ls              # 列出已安装的 Node.js 版本
which node          # 应显示 ~/.nvm 路径
node -v             # 应为 nvm 管理的版本

可能遇到的坑

  1. Shell 配置冲突
    • 检查 ~/.zprofile~/.zshenv 是否有覆盖 PATH 的设置。
  2. 权限问题
    • 如果 nvm install 失败,尝试:
      sudo chown -R $(whoami) ~/.nvm
      
  3. iTerm2 配置未继承
    • 在 iTerm2 中确保 Shell 路径为 /bin/zsh(Preferences > Profiles > General)。

总结

  1. 卸载全局 Node.js,避免与 nvm 冲突。
  2. 正确加载 nvm~/.zshrc
  3. nvm 重新安装 Node.js 并设为默认版本。
  4. 调整 PATH 顺序,确保 nvm 路径优先。

通过以上步骤,iTerm2 即可正常使用 nvm 管理的 Node.js 和工具链。


延伸阅读

  • nvm 官方文档
  • Mac 环境变量加载顺序详解

希望这篇指南能帮你解决问题!如果有其他疑问,欢迎留言讨论。 🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/82537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React的单向数据绑定

文章目录 单项数据绑定通过onChange方法,实现双向数据绑定 单项数据绑定 在 Vue 中,可以通过 v-model 指令来实现双向数据绑定。但是,在 React 中并没有指令的概念,而且 React 默认不支持 双向数据绑定。 React 只支持&#xff…

AWS関連職種向け:日本語面接QA集

1. 自己紹介(じこしょうかい) Q:簡単に自己紹介をお願いします。 A: はい、〇〇と申します。これまで約4年間、主にAWSを基盤としたインフラ設計・構築・運用に従事してまいりました。VPCやEC2、RDS、S3などの基本サービスの設計…

AlphaCore GPU 物理仿真引擎内测邀请

AlphaCore 是 MooreThreads 研发的下一代 GPU 物理仿真引擎,为影视特效,游戏交互,数字孪生等领域,提供超高精度的仿真模拟。 申请试用​ 目前我们的Catalyst FX 还处于内部申请测试阶段,请发送邮件至 alphacoremthre…

鸿蒙OSUniApp 实现的日期选择器与时间选择器组件#三方框架 #Uniapp

UniApp 实现的日期选择器与时间选择器组件 在移动应用开发中,日期选择器和时间选择器是表单、预约、日程、打卡等场景中不可或缺的基础组件。一个好用的日期/时间选择器不仅能提升用户体验,还能有效减少输入错误。随着 HarmonyOS(鸿蒙&#…

嵌入式开发STM32 -- 江协科技笔记

1.背景介绍及基础认知 8大输入输出 斯密特触发器:高于设定阈值输出高电平,低于设定阈值输出低电平 有关上拉输入、下拉输入、推挽输出、开漏输出、复用开漏输出、复用推挽输出以及浮空输入、模拟输入的区别 1、上拉输入:上拉就是把电位拉高…

RISC-V 开发板 MUSE Pi Pro RTSP 串流 CSI ov5647 摄像头

视频链接:RISC-V 开发板 MUSE Pi Pro RTSP 串流 CSI ov5647 摄像头_哔哩哔哩_bilibili RISC-V 开发板 MUSE Pi Pro RTSP 串流 CSI ov5647 摄像头 RTSP(Real-Time Streaming Protocol,实时流传输协议) 是一种基于文本的应用层协议&…

Python面试1

1. 解释型语言和编译型语言的区别 编译型语言: 将程序编译成二进制可执行程序(C、C) 解释型语言: 将程序逐行解释运行(python) Java不是将源程序直接编译机器语言,而是编译成字节码文件,然后用…

输入一串字符,统计其中字母的个数

#include <stdio.h> int main() { char ch; int count 0; printf("请输入一串字符&#xff1a;\n"); while ((ch getchar())! \n) { if ((ch > a && ch < z) || (ch > A && ch < Z)) { count; } } printf("字母的个数为&a…

git基础语法回顾

1. 初始化与克隆 git init 初始化一个新的本地仓库。git clone <repo-url> 克隆远程仓库到本地&#xff08;如 git clone https://github.com/user/repo.git&#xff09;。 2. 基础操作 git add <file> 将文件添加到暂存区&#xff08;如 git add main.py&#x…

华为仓颉语言初识:结构体struct和类class的异同

前言 华为仓颉语言是鸿蒙原生应用的一种新的编程语言&#xff0c;采用面向对象的编程思想&#xff0c;为开发者带来新的开发体验。不仅可以和 ArkTs 相互调用&#xff0c;更能提升应用程序的性能&#xff0c;更重要的是仓颉语言的特点结合了 java 和 C 的特点。对开发者来说比…

电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测

电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测 目录 电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测预测效果基本描述程序设计参考资料 预测效果 基本描述 电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测 运行环境Matlab2023b及以上&#xff0c;锂电池剩余寿…

在 Ubuntu 24.04 LTS 上 Docker 部署 DB-GPT

一、DB-GPT 简介 DB-GPT 是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。目的是构建大模型领域的基础设施&#xff0c;通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及…

早停策略和模型权重的保存

知识点回顾&#xff1a; 过拟合的判断&#xff1a;测试集和训练集同步打印指标模型的保存和加载 仅保存权重保存权重和模型保存全部信息checkpoint&#xff0c;还包含训练状态 早停策略 作业&#xff1a;对信贷数据集训练后保存权重&#xff0c;加载权重后继续训练50轮&#xf…

DeepSpeed-Ulysses:支持极长序列 Transformer 模型训练的系统优化方法

DeepSpeed-Ulysses&#xff1a;支持极长序列 Transformer 模型训练的系统优化方法 flyfish 名字 Ulysses “Ulysses” 和 “奥德修斯&#xff08;Odysseus&#xff09;” 指的是同一人物&#xff0c;“Ulysses” 是 “Odysseus” 的拉丁化版本 《尤利西斯》&#xff08;詹姆…

Redis-基础-总结

一、概述 Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数据结构&#xff0c;例如String、Hash、List、Set、sortedset等等。数据是存在内存中的&#xff0c;同时Redis…

尚硅谷redis7 28-32 redis持久化之理论介绍

28redis持久化之理论介绍 redis持久化&#xff1a;redis如何将内存数据写入磁盘中 为什么需要持久化&#xff1f; 内存数据一断电就会消失&#xff0c;那么所有的请求都会打到数据库中。因此让redis中的数据长期持有&#xff0c;不管是重启、故障、恢复、宕机&#xff0c;还…

JS逆向【抖查查】逆向分析 | sign | secret签名验证

1.目标 目标网址&#xff1a;https://www.douchacha.com/bloggerRankingRise 切换日期出现目标请求 import requests import jsonheaders {"accept": "application/json, text/plain, */*","accept-language": "zh-CN,zh;q0.9","…

【数据仓库面试题合集④】SQL 性能调优:面试高频场景 + 调优策略解析

随着业务数据规模的持续增长,SQL 查询的执行效率直接影响到数据平台的稳定性与数据产出效率。因此,在数据仓库类岗位的面试中,SQL 性能调优常被作为重点考察内容。 本篇将围绕常见 SQL 调优问题,结合实际经验,整理出高频面试题与答题参考,助你在面试中游刃有余。 🎯 高…

python打卡训练营打卡记录day37

知识点回顾&#xff1a; 过拟合的判断&#xff1a;测试集和训练集同步打印指标模型的保存和加载 仅保存权重保存权重和模型保存全部信息checkpoint&#xff0c;还包含训练状态 早停策略 作业&#xff1a;对信贷数据集训练后保存权重&#xff0c;加载权重后继续训练50轮&#xf…

卷积神经网络(CNN)深度讲解

卷积神经网络&#xff08;CNN&#xff09; 本篇博客参考自大佬的开源书籍&#xff0c;帮助大家从头开始学习卷积神经网络&#xff0c;谢谢各位的支持了&#xff0c;在此期待各位能与我共同进步​ 卷积神经网络&#xff08;CNN&#xff09;是一种特殊的深度学习网络结构&#x…