适用人群:前端/后端/全栈开发者,Mac/Linux/Windows(nvm-windows)用户;需要在多项目间快速切换 Node 版本、或在国内网络环境下稳定安装 Node。


一、为什么要用 nvm?

  • 一机多版本:不同项目依赖不同 Node 版本(如 16.x / 18.x / 20.x),nvm 可以一条命令切换。

  • 对系统无侵入:不需要 sudo,不污染系统路径,卸载也很干净。

  • 项目级约束:配合 .nvmrc 固定项目 Node 版本,团队一致性更好。

  • 镜像可配:国内可配置镜像源,大幅提升安装速度与成功率。

最佳实践:开发机使用 nvm 管理 Node,避免系统级安装(如 brew install node 或官方 pkg)造成 PATH 冲突。


二、TL;DR 快速开始(Mac/Linux,推荐)

# 1)可选:国内加速(建议先设置)
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
export NVM_IOJS_ORG_MIRROR=https://npmmirror.com/mirrors/iojs# 2)安装 nvm(以 v0.39.7 为例,可改最新稳定版)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 或
#wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash# 3)让当前 Shell 生效(Zsh 常用)
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"# 4)装一个稳定 LTS 版本并使用
nvm install --lts
nvm use --lts
node -v && npm -v

若重开终端后 nvm 不生效,请将 第3步的两行加入 ~/.zshrc~/.bashrc,并执行 source ~/.zshrc(或重开终端)。


三、安装 nvm(详细版)

3.1 macOS / Linux(官方脚本,推荐)

  1. 准备镜像环境(可选但强烈推荐)

    echo 'export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node' >> ~/.zshrc
    echo 'export NVM_IOJS_ORG_MIRROR=https://npmmirror.com/mirrors/iojs' >> ~/.zshrc
    source ~/.zshrc
    
  2. 执行官方安装脚本

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
    # 或 wget -qO-
    
  3. 写入 Shell 启动配置(安装脚本通常会自动写入,若未成功手动添加)

    # Zsh(macOS 新系统默认)
    echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' >> ~/.zshrc
    source ~/.zshrc# Bash
    echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' >> ~/.bashrc
    source ~/.bashrc
    
  4. 验证安装

    command -v nvm
    nvm --version
    

3.2 macOS(Homebrew 方式,次选)

说明:nvm 官方推荐脚本安装。若使用 Homebrew,需要手动设置环境变量并创建工作目录。

brew install nvm
mkdir -p ~/.nvm# Apple Silicon(M 系,Homebrew 默认前缀 /opt/homebrew)
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc
echo '[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && . "/opt/homebrew/opt/nvm/nvm.sh"' >> ~/.zshrc# Intel Mac(Homebrew 前缀 /usr/local)
# echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc
# echo '[ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"' >> ~/.zshrcsource ~/.zshrc
nvm --version

避免冲突:若机器上曾用 brew install node 或官方 pkg 安装 Node,请先卸载它们(或至少确保 PATH 顺序让 nvm 管理的 Node 优先)。

3.3 Windows(nvm-windows)

  • Windows 下常用的是 nvm-windows(与 nvm 项目不同代码库,但命令类似)。

  • 安装步骤:

    1. 卸载先前用官方 msi 安装的 Node(如已安装)。

    2. 下载并安装 nvm-setup(管理员运行)。

    3. 安装时选择 nvm 根目录Node 安装目录(默认即可)。

    4. 通过命令提示符/PowerShell 使用:

      nvm version
      nvm node_mirror https://npmmirror.com/mirrors/node
      nvm npm_mirror https://npmmirror.com/mirrors/npm
      nvm install lts
      nvm use lts
      node -v
      
  • 差异提示:nvm-windows 使用全局 symlink 切换 Node,切换时需要管理员权限的情况更多;.nvmrc 文件不自动生效(可写脚本或使用工具实现)。


四、常用命令速查

# 安装/切换
nvm install <version>           # 例如:nvm install 20.18.0 / nvm install --lts / nvm install node(最新)
nvm use <version>               # 切换到指定版本
nvm alias default <version>     # 设置默认版本(新终端自动使用)
nvm uninstall <version>         # 卸载某版本# 查询
nvm ls                          # 查看本机已安装版本
nvm ls-remote                   # 查看可安装版本(受镜像/网络影响)
nvm current                     # 当前使用版本# 迁移全局包(例如从 16 迁移到 18)
nvm reinstall-packages 16

小技巧:nvm install --lts --latest-npm 可在安装 LTS 的同时升级到较新的 npm(不同版本行为可能略有差异)。


五、项目内固定 Node 版本(.nvmrc

  1. 在项目根目录创建 .nvmrc

    v18
    # 或 18.20.3 / lts/* / v20
    
  2. 使用(进入项目目录后):

    nvm use        # 读取 .nvmrc 自动切换
    nvm install    # 如未安装会直接安装 .nvmrc 指定的版本
    
  3. 自动切换建议

    • Zsh 用户可使用插件(如 zsh-nvm)或 direnv 在进入目录时自动执行 nvm use


六、国内网络环境与加速策略

  • Node 镜像

    export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
    export NVM_IOJS_ORG_MIRROR=https://npmmirror.com/mirrors/iojs
    
  • npm 源(按需)

    npm config set registry https://registry.npmmirror.com
    # 恢复官方源:
    # npm config set registry https://registry.npmjs.org
    
  • 代理(公司/校园网)

    export HTTP_PROXY=http://127.0.0.1:7890
    export HTTPS_PROXY=http://127.0.0.1:7890
    
  • Apple Silicon 注意:优先安装 arm64 对应的 Node 版本,避免 Rosetta 兼容层导致的二进制不匹配。


七、与包管理器协作(npm / pnpm / yarn / corepack)

  • npm:随 Node 安装,不同 Node 版本对应不同的全局包目录。

  • pnpm / yarn

    • Node 新版本中内置 Corepack(部分版本需手动启用):

      corepack enable
      # 指定版本
      corepack prepare pnpm@latest --activate
      
    • 项目建议使用锁文件package-lock.json / pnpm-lock.yaml / yarn.lock)保障一致性。

  • 不要在 nvm 场景下修改 npm 全局 prefix 到系统路径,也不要使用 sudo npm -g


八、常见问题(FAQ)与排查

  1. nvm: command not found

    • 是否把下列内容写入了 shell 配置文件(~/.zshrc~/.bashrc)并 source

      export NVM_DIR="$HOME/.nvm"
      [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
      
    • 是否开启了新终端?是否有安全软件阻拦?

  2. node 版本切换后仍不生效

    • 可能 PATH 中仍有系统 Node(如 Homebrew/官方 pkg)优先生效。

    • 解决:卸载系统 Node,或确保 nvm 管理的路径在 PATH 前。

  3. 安装 Node 速度慢或失败

    • 确认镜像变量 NVM_NODEJS_ORG_MIRROR 已设置并生效。

    • 公司/学校网络需配置 HTTP/HTTPS 代理。

  4. 全局包丢失(切换版本后找不到全局命令)

    • 不同 Node 版本的全局包隔离。使用:

      nvm reinstall-packages <旧版本号>
      
  5. nvm 与 Homebrew 冲突

    • 若曾 brew install node,请卸载或保证 nvm 的 node 在 PATH 前。

  6. Windows 下切换失败或权限问题

    • 以管理员身份运行 PowerShell;关闭占用 Node 的进程;必要时重启终端。


九、团队协作与 CI 提示

  • 在仓库根目录提供:

    • .nvmrc(如 v18

    • 包管理器锁文件(确保依赖可重复安装)

  • CI(GitHub Actions/GitLab CI)不必安装 nvm,可直接使用官方 setup-node/runner 的 node,但本机开发与 CI 的 Node 版本务必一致(遵循 .nvmrc)。


十、最佳实践清单(可直接套用)

  • 安装前先设置镜像:NVM_NODEJS_ORG_MIRROR

  • 统一使用 LTS:nvm install --lts && nvm alias default lts/*

  • 每个项目放一个 .nvmrc,并在进入项目目录后执行 nvm use

  • 不使用 sudo npm -g,需要的 CLI 尽量 npx 或加到 devDependencies

  • 切换大版本后执行 nvm reinstall-packages 迁移常用全局包。

  • 避免同时存在系统级 Node 与 nvm Node;若必须共存,确保 PATH 顺序正确。


最后小总结

使用 nvm 管理 Node 版本是本地开发环境的“地基工程”。配置好镜像与 .nvmrc 后,你的多项目协作、版本切换、团队一致性都会显著提升。如果你在安装或切换过程中遇到特殊报错,欢迎在评论区贴出你的系统信息与命令输出,一起排查。

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

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

相关文章

Unity Shader unity文档学习笔记(二十一):几种草体的实现方式(透明度剔除,GPU Instaning, 曲面细分+几何着色器实现)

1.透明度剔除&#xff08;性能较差&#xff0c;不同颜色时需要不同材质会导致多个dc&#xff09; clip(_Color.a - _Cutoff); 传入值为0时 剔除 类似的草体效果&#xff1a; 2.GPU Instaning(可以自定义一次性合批最多1023个&#xff0c;能够传递颜色值等等&#xff08;做草…

UX 设计入门终章:让洞察落地!用用户流程图、IA 和旅程图,设计用户与产品的互动故事

欢迎来到本系列课程的最后一课。 如果你把之前的学习比作是绘制一份建筑蓝图&#xff0c;那么今天&#xff0c;你将根据自己收集到的所有用户数据&#xff0c;描绘出空间布局&#xff08;用户流程图&#xff09;、理清结构关系&#xff08;信息架构&#xff09;&#xff0c;并最…

【RAG知识库实践】向量数据库VectorDB

一、概述 1.1 什么是向量库 向量数据库是一种专门为存储、索引和查询高维向量数据而优化的数据库系统。与传统的关系型数据库不同,向量数据库将数据映射到向量空间中,使得数据的相似性计算、聚类、分类和检索变得更加高效和精确 向量数据库一般包括以下几个部分:索引、查询…

EasyExcel 3.x 导出动态表头,动态sheet页

动态导出sheet页Overridepublic void exportAnswerListV1(HttpServletResponse response, SmtSurveyUserAnswerRecord smtSurveyUserAnswerRecord) {// 1. 准备问卷数据String formType smtSurveyUserAnswerRecord.getFormType();if (ObjectUtil.isEmpty(formType)) {throw ne…

重学JS-004 --- JavaScript算法与数据结构(四)JavaScript 表单验证

文章目录HTMLlabel 属性input 属性button 属性fieldset 属性select 属性option 属性div 属性scriptgetElementByIdquerySelectorAllnull循环模版文字函数事件监听器regex举例StringMathArrayHTML HTML 属性应该用双引号引起来。 label 属性 for“” input 属性 id“” typ…

本地搭建 Redis/MySQL 并配置国内镜像加速(Docker/原生安装 | macOS/Linux/Windows)

适用人群&#xff1a;前端/后端/数据/测试工程师&#xff1b;需要在单机上快速搭建 Redis 与 MySQL 的开发环境&#xff1b;同时在国内网络环境下加速下载&#xff08;容器镜像、系统包仓库&#xff09;。文章结构&#xff1a;一图流 → TL;DR → Docker 方式 → 原生安装&…

SynClub-百度在海外推出的AI社交产品

本文转载自&#xff1a;SynClub-百度在海外推出的AI社交产品 - Hello123工具导航 ** 一、&#x1f916; SynClub 是什么&#xff1f; SynClub 是百度出海的 AI 社交产品&#xff0c;主打 "打造专属 AI 朋友" 的创新概念&#xff0c;让你在虚拟世界拥有真正懂你的贴…

Easy Rules规则引擎:轻量级Java规则处理实践指南

引言:业务规则与代码解耦的艺术 在现代软件开发中,业务规则频繁变更与核心逻辑稳定性之间的矛盾日益突出。传统硬编码的if-else语句在面对复杂业务场景时会导致: 代码臃肿:成百上千的条件分支难以维护 耦合度高:业务逻辑与系统架构深度绑定 变更成本高:微小规则调整需要…

机器人 - 无人机基础(5) - 飞控中的传感器

目录 一、加速度计 1.1 加速度计原理 1.2 加速度计校准 1.2.1 误差模型 1.2.2 关于MPU6050校准方式 与 代码思路 二、陀螺仪 2.1 陀螺仪原理 2.1.1 科里奥利力 2.1.2 陀螺仪原理 2.2 陀螺仪校准 三、加速度计与陀螺仪滤波部分 四、磁力计 4.1 磁力计原理 4.2 磁力…

PHP - 线程安全 - 疑问与答案

线程安全问题&#xff08;多线程环境需加锁&#xff09; 怎么理解 php有线程安全问题吗要理解 PHP 中的线程安全问题&#xff0c;需要结合 PHP 的运行模式和线程安全的本质来分析&#xff1a;1. 线程安全的本质线程安全问题的核心是&#xff1a;当多个线程同时访问共享资源&…

使用脚本进行监测以nginx状态页为例

1、首先打开nginx的状态页 location /nginx_status {stub_status on;}2、进行访问测试 curl http://127.0.0.1/nginx_statusActive connections: 1 server accepts handled requests1 1 1 Reading: 0 Writing: 1 Waiting: 03、在客户端编写脚本进行数据采集 编写脚本方便采集不…

prettier、eslint、stylelint在项目中使用

prettier 1&#xff09;vscode中使用 a. 安装插件(Prettier)安装成功后&#xff0c;在你打开支持的文件时&#xff0c;下方文件信息状态栏会有prettier标致&#xff1a;双击它或者直接在输出命令窗口那里查看prettier的日志信息&#xff1a;从日志这里可以看出&#xff0c;它是…

【C++】类对象内存布局与大小计算

1. 计算类对象的大小类实例化的对象中只存储成员变量&#xff0c;不存储成员函数&#xff0c;函数要用是通过 this 指针拿的。因为一个类可以实例化出 N 个对象&#xff0c;每个对象的成员变量都可以存储不同的值&#xff0c;但是调用的函数却是同一个。如果每个对象都成员函数…

容易忽视的TOS无线USB助手配网和接入USB使用: PC和TOS-WLink需要IP畅通,

引言&#xff1a;我们常常把重心放在了TOS-WLink的加入路由器&#xff0c;获取IP&#xff1b;常常忽视了其实是要求PC和TOS-WLink需要IP畅通TOS无线USB助手首次蓝牙配网, 无线接入USB设备到电脑, 分为是两个过程&#xff1a;1, 蓝牙连接TOS-WLink&#xff0c;如果配置的WIF…

学习Python中Selenium模块的基本用法(7:元素操作-1)

定位网页元素后&#xff0c;Selenium模块支持点击、发送文本或按键、清除内容等操作。本文以百度网站为例学习并测试这几类操作的基本用法。首先是发送文本或按键&#xff0c;主要用到send_keys函数&#xff0c;如果是发送文本&#xff0c;则直接将文本内容作为函数入参即可&am…

使用MP4视频格式链接地址的自适应视频弹窗实现方案HTML代码

以下是使用MP4视频格式链接地址的自适应视频弹窗实现方案&#xff1a;视频弹窗播放器 使用原生MP4视频格式链接&#xff0c;直接通过HTML5 video元素播放 响应式设计适配不同屏幕尺寸&#xff0c;16:9视频比例保持不变 底部视频列表可横向滚动&#xff0c;点击缩略图切换不同视…

中农具身导航赋能智慧农业!AgriVLN:农业机器人的视觉语言导航

作者&#xff1a;Xiaobei Zhao, Xingqi Lyu, Xiang Li单位&#xff1a;中国农业大学论文标题&#xff1a;AgriVLN: Vision-and-Language Navigation for Agricultural Robots论文链接&#xff1a;https://arxiv.org/pdf/2508.07406v1代码链接&#xff1a;https://github.com/Al…

Zynq开发实践(Verilog、仿真、FPGA和芯片设计)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】zynq最大的优势&#xff0c;就是把arm和fpga结合在一起了。这样一颗soc里面&#xff0c;就可以用软件去驱动外设ip&#xff0c;这是之前没有过的体验…

LabVIEW刺激响应测量解析

​该 LabVIEW 程序用于刺激 - 响应测量&#xff0c;实现测试信号生成、响应采集及测量分析&#xff0c;涵盖信号同步、并行处理等概念&#xff0c;用于设备总谐波失真&#xff08;THD&#xff09;等电信号特性测量场景&#xff0c;借助 LabVIEW 图形化编程优势&#xff0c;将复…

Boosting(提升法)详解

一、引言在集成学习&#xff08;Ensemble Learning&#xff09;中&#xff0c;Boosting&#xff08;提升法&#xff09; 是一种非常经典且强大的方法。它通过将多个弱学习器&#xff08;Weak Learners&#xff09;进行迭代组合&#xff0c;逐步提升整体的预测性能&#xff0c;从…