NVM 安装 (Windows版本)

NVM 安装 (Windows版本)

  • [一、NVM 介绍](#一、NVM 介绍)
    • [1. 什么是 NVM](#1. 什么是 NVM)
    • [2. NVM、Node.js 与 NPM 的关系](#2. NVM、Node.js 与 NPM 的关系)
  • [二、NVM 的下载与安装(Windows版本)](#二、NVM 的下载与安装(Windows版本))
    • [步骤1. 下载渠道(官方安全)](#步骤1. 下载渠道(官方安全))
    • [步骤2. 配置 NPM 项目加速镜像](#步骤2. 配置 NPM 项目加速镜像)
    • [步骤3. 配置 NVM 镜像](#步骤3. 配置 NVM 镜像)
    • [步骤4. 配置全局共享 NPM](#步骤4. 配置全局共享 NPM)
      • [(1)如何配置全局共享 NPM(看需)](#(1)如何配置全局共享 NPM(看需))
      • [(2)取消全局共享 NPM(看需)](#(2)取消全局共享 NPM(看需))
  • [三、Node 版本切换的注意事项](#三、Node 版本切换的注意事项)
  • [四、解决全局包版本和某 Node 版本不兼容的方法](#四、解决全局包版本和某 Node 版本不兼容的方法)
  • 五、扩展
    • [一、NPM 的默认全局安装目录](#一、NPM 的默认全局安装目录)
    • [二、NPM 的默认缓存安装目录](#二、NPM 的默认缓存安装目录)
    • [三、NPM 的本地安装(不加 -g)与全局安装(加 -g)](#三、NPM 的本地安装(不加 -g)与全局安装(加 -g))

一、NVM 介绍

1. 什么是 NVM

NVM 全称为 Node Version Manager,在 Windows 系统中特指 nvm-windows------一款专门用于管理多 Node.js 版本的工具。

其核心价值是解决 Windows 下"不同项目依赖不同 Node.js 版本"的冲突问题:例如同时开发老项目(需 Node 16)与新项目(需 Node 18)时,无需手动卸载旧版本、修改系统环境变量,仅通过命令即可实现 Node 版本的一键切换,确保各项目环境独立且稳定。

2. NVM、Node.js 与 NPM 的关系

三者在 Windows 环境下呈"层级绑定"关系,逻辑清晰且联动紧密,具体如下:

  • NVM(nvm-windows) :顶层版本管理者,负责 Node.js 版本的"安装、切换、卸载"。

    例如:通过 nvm install 18 安装 Node 18,通过 nvm use 16 切换到 Node 16,不直接参与代码运行或包管理。

  • Node.js :底层运行环境,是执行前端代码(如 Vue、React 项目)的核心。

    每个 Node.js 版本在 Windows 中对应独立文件夹(如 D:\Nvm\versions\node\v16.18.0),不同版本互不干扰。

  • NPM :Node.js 自带的包管理工具,每个 Node.js 版本会自动附带匹配的 NPM 版本 (如 Node 16 绑定 NPM 8,Node 18 绑定 NPM 9)。

    当 NVM 切换 Node 版本时,NPM 会自动同步切换(例如切到 Node 18 后,npm -v 会显示 9.x),无需额外配置。

实操案例

通过 NVM 安装 Node 16 和 18 后,执行 nvm use 16 会自动调用 Node 16 及配套的 NPM 8;

执行 nvm use 18 则切换为 Node 18 及配套的 NPM 9,三者一一对应,避免版本混乱。

二、NVM 的下载与安装(Windows版本)

Windows 需使用 nvm-windows 工具,需从官方渠道下载并按规范安装,步骤如下:

步骤1. 下载渠道(官方安全)

(1)安装步骤(关键注意事项)

  1. 解压下载的 nvm-setup.zip,双击 nvm-setup.exe 启动安装,同意协议后选择 NVM 安装目录 (如 D:\Nvm),严禁选择含空格/特殊字符的路径 (如 C:\Program Files,会导致 Node 安装失败)。

  2. 下一步设置 Node.js 快捷方式目录 (如 D:\NodeJs),此目录为 Windows 系统调用 Node 的"入口路径",需与 NVM 安装目录分开且为空。

  3. 点击"Install"完成安装,NVM 会自动配置 NVM_HOME(NVM 安装目录)和 NVM_SYMLINK(Node 快捷方式目录)环境变量,无需手动添加。

(2)安装验证

打开 新的 CMD/PowerShell 窗口(旧窗口不加载新环境变量),执行以下命令:

bash 复制代码
# 查看 NVM 版本,显示版本号(如 1.1.10)即安装成功
nvm version
# 查看本地已安装的 Node 版本(初始为空)
nvm ls

步骤2. 配置 NPM 项目加速镜像

NPM 默认从国外官方镜像下载项目依赖,Windows 下易因网络问题导致超时,需配置国内加速镜像(npmmirror,原淘宝镜像)

(1)核心镜像信息

  • 原镜像(默认):https://registry.npmjs.org/(服务器位于国外,下载 vueaxios 等包时易出现"ETIMEDOUT"超时错误);

  • 加速镜像:https://registry.npmmirror.com/(国内镜像,10 分钟同步一次官方仓库,Windows 下下载速度可从"几十 KB/s"提升至"几 MB/s")。

(2)配置步骤

  1. 查询当前镜像
bash 复制代码
npm config get registry

若输出 https://registry.npmjs.org/,说明当前使用默认国外镜像。

  1. 配置加速镜像
bash 复制代码
npm config set registry https://registry.npmmirror.com
  1. 验证配置结果
bash 复制代码
npm config get registry

若输出 https://registry.npmmirror.com,说明配置成功。

(3)还原默认镜像(如需)

若需切换回 NPM 官方镜像,执行以下命令:

bash 复制代码
npm config set registry https://registry.npmjs.org/

实操案例 :未配置加速镜像时,npm install vue 需 30 秒且易超时;配置后仅需 5 秒即可完成下载,且无网络错误。

步骤3. 配置 NVM 镜像

NVM 下载 Node.js 版本时默认从国外官方镜像获取,Windows 下易因网络问题导致下载缓慢或中断,需配置国内加速镜像,具体如下:

(1)核心镜像信息

原镜像(默认):https://nodejs.org/dist/(下载 Node 安装包时速度慢,如 Node 16 需 10 分钟);

加速镜像:

  • Node 镜像:https://npmmirror.com/mirrors/node/
  • NPM 镜像:https://npmmirror.com/mirrors/npm/(下载 Node 时自动同步 NPM 安装包,确保版本匹配)。

(2)配置步骤

1.找到 NVM 配置文件 :打开 NVM 安装目录(如 D:\Nvm),找到 settings.txt 文件(文本格式)。

2.添加镜像配置 :用记事本打开 settings.txt,在文件末尾追加以下两行:

bash 复制代码
node_mirror: https://npmmirror.com/mirrors/node/
npm_mirror: https://npmmirror.com/mirrors/npm/

3.验证配置结果:执行以下命令下载 Node 16,观察下载速度:

bash 复制代码
nvm install 16.18.0

配置前需 10 分钟,配置后仅需 1 分钟,且无中断,说明配置成功。

步骤4. 配置全局共享 NPM

注意!!!
v1.2.2 安装包默认实现了npm的全局共享

全局共享NPM最直观的现象:在任意一个Node版本下全局安装的包,切换到另一个版本后可直接使用,无需重复安装。

优点:装一次全局包,多版本能用

缺点:若全局包版本和某 Node 版本不兼容,切换后会直接报错(解决方案看章节四)。

(1)如何配置全局共享 NPM(看需)

实现核心:就是把他们的全局安装目录统一到同一个文件

步骤如下:

1.创建统一全局目录:如 D:\NodeGlobal

2.给每个 Node 版本设置统一 prefix

bash 复制代码
# 切换到 Node 16
nvm use 16
npm config set prefix D:\NodeGlobal
# 切换到 Node 18
nvm use 18
npm config set prefix D:\NodeGlobal

3.验证配置:任意 Node 版本下执行 npm config get prefix,均输出 D:\NodeGlobal 即成功。。

(2)取消全局共享 NPM(看需)

如果你配置了全局共享 NPM,想要为每个 npm 恢复独立全局目录,操作如下

针对每个 Node 版本,删除统一prefix配置

由于prefix配置是按 Node 版本独立存储的(即 Node 16 和 18 的prefix是分开设置的),需要分别切换到每个版本执行删除操作:

bash 复制代码
# 1. 切换到Node 16
nvm use 16

# 2. 删除之前设置的统一prefix(如D:\NodeGlobal)
npm config delete prefix

# 3. 验证是否恢复默认全局目录
npm config get prefix
# 输出应为Node 16的默认全局目录,例如:
# D:\Nvm\versions\node\v16.18.0\node_global
bash 复制代码
# 1. 切换到Node 18
nvm use 18

# 2. 同样删除统一prefix配置
npm config delete prefix

# 3. 验证默认目录
npm config get prefix
# 输出应为Node 18的默认全局目录,例如:
# D:\Nvm\versions\node\v18.20.3\node_global

三、Node 版本切换的注意事项

场景一:重新安装项目依赖

Node 版本切换后,项目依赖需重新下载,因不同 Node 版本对依赖的编译格式、子版本解析规则存在差异。

案例 :用 Node 16 开发"项目 A"并安装依赖(D:\Projects\A\node_modules),切换到 Node 18 后运行 npm run dev 报错"Cannot find module 'xxx'",需按以下步骤操作:

  1. 删除项目 A 根目录的 node_modules 文件夹和 package-lock.json 文件;

  2. 执行 npm install,重新下载适配 Node 18 的依赖;

  3. 再次执行 npm run dev,项目正常启动。

场景二:检查并补装全局包

切换 Node 版本后,需确认当前版本是否已安装所需全局包(如 vue-cli、vite),未安装则需补装。

案例 :切换到 Node 18 后,执行 vue -V 提示"'vue' 不是内部或外部命令",说明 Node 18 未安装 vue-cli,需执行:

bash 复制代码
# 全局安装适配 Node 18 的 vue-cli(自动下载 最新 版本)
npm install -g @vue/cli
# 验证
vue -V  # 输出 @vue/cli 5.x.x,说明安装成功

场景三:清理 NPM 缓存(必要时)

切换 Node 版本后,若 npm install 提示"cache corrupted"或"invalid cache",需清理缓存后重新安装。

案例 :切换 Node 版本后执行 npm install axios 报错,执行 npm cache clean --force 清理缓存,再重新安装即可解决。

四、解决全局包版本和某 Node 版本不兼容的方法

临时解决

该方式需要频繁卸载重装,仅适合短期应急。

bash 复制代码
# 切换到Node 16,装兼容版本
nvm use 16.20.2
npm uninstall -g @vue/cli
npm install -g @vue/cli@4

# 用完Node 16后,切回Node 18时,再装回高版本
nvm use 18.20.2
npm uninstall -g @vue/cli
npm install -g @vue/cli@5

# 用完Node 18后,切回Node 16时,再装回低版本
nvm use 16.20.2
npm uninstall -g @vue/cli
npm install -g @vue/cli@4

长期解决

恢复 "每个 Node 版本独立的全局目录"

bash 复制代码
# 1. 分别删除两个版本的共享prefix
nvm use 16.20.2
npm config delete prefix

nvm use 18.20.2
npm config delete prefix

# 2. 验证是否恢复默认独立目录
nvm use 16.20.2
npm config get prefix  # 应输出Node 16专属目录(如D:\Nvm\versions\node\v16.20.2\node_global)

nvm use 18.20.2
npm config get prefix  # 应输出Node 18专属目录

# 3. 为两个版本安装专属全局包
nvm use 16.20.2
npm install -g @vue/cli@4  # Node 16用4.x

nvm use 18.20.2
npm install -g @vue/cli@5  # Node 18用5.x

# 4. 验证版本独立
nvm use 16.20.2 && vue -V  # 输出4.x
nvm use 18.20.2 && vue -V  # 输出5.x

五、扩展

一、NPM 的默认全局安装目录

NPM 的"全局安装目录"用于存储通过 npm install -g <包名> 安装的"全局包"(如 vue-cli、vite)。

Windows 下分"非 NVM 环境"和"NVM 环境"两种场景,具体如下:

(1)非 NVM 环境(单独安装 Node.js)

默认路径C:\Users<你的用户名>\AppData\Roaming\npm(例如用户名为"ZhangSan",路径为 C:\Users\ZhangSan\AppData\Roaming\npm)。

目录内容举例

  • node_modules 文件夹:存储全局包,如安装 vue-clivite 后,会生成 @vue/clivite 子文件夹;
  • 可执行命令文件:如 vue.cmdvite.cmd,在任意 CMD 窗口输入 vue -Vvite --version 即可调用。

(2)NVM 环境(多 Node 版本管理)

默认路径:%NVM_HOME%\versions\node\v<版本号>\node_global

(例如 NVM 安装在 D:\Nvm,Node 16 的路径为 D:\Nvm\versions\node\v16.18.0\node_global)。

目录内容举例:

  • 每个 Node 版本的全局包独立存储:
    如给 Node 16 安装 npm install -g @vue/cli@4,此目录下的 node_modules 会包含 @vue/cli(4.x 版本);切换到 Node 18 后,全局目录变为 D:\Nvm\versions\node\v18.20.3\node_global,若未安装 vue-cli,输入 vue -V 会提示"'vue' 不是内部或外部命令"。

(3)查看当前全局安装目录

无论是否使用 NVM,执行以下命令即可查看当前生效的全局目录:

bash 复制代码
npm config get prefix

二、NPM 的默认缓存安装目录

NPM 缓存目录用于存储"已下载的包压缩包及解压文件",避免重复从网络下载,Windows 下无论是否使用 NVM,缓存目录均统一

(1)默认路径

C:\Users<你的用户名>\AppData\Local\npm-cache

(例如用户名为"ZhangSan",路径为 C:\Users\ZhangSan\AppData\Local\npm-cache)。

(2)目录内容举例

  • 包压缩包:如下载 vue@2.6.14 后,会生成 vue-2.6.14.tgz 文件;
  • 解压缓存文件:_cacache 文件夹中存储解压后的包源码(如 vue 的核心文件),下次安装相同版本时,NPM 直接复用缓存,无需重新下载;
  • 缓存日志:logs 文件夹中的日志文件,记录每次下载的时间、包版本、下载状态(成功/失败)。

(3)缓存相关操作

查看当前缓存目录:

bash 复制代码
npm config get cache

清理缓存(解决缓存损坏导致的安装失败):

bash 复制代码
npm cache clean --force

实操案例:执行 npm install vue 时提示"cache corrupted",执行 npm cache clean --force 清理缓存后,重新安装即可成功。

npm install(本地安装)与 npm install -g(全局安装)的关系(Windows 案例)

三、NPM 的本地安装(不加 -g)与全局安装(加 -g)

  • 本地安装(不加 -g):每个项目单独装,只在当前项目里能用,存在项目的 node_modules 中。换项目就得重新装。
  • 全局安装(加 -g):装一次,所有项目 / 目录都能用,存在当前 Node 版本的全局目录中。换 Node 版本才需要重新装。

一句话总结:本地是 "项目专属,重复装";全局是 "一次安装,全局用(当前 Node 版本下)"。

相关推荐
学传打活1 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng1689 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心11 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552717 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552718 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝19 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552719 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552720 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552722 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552722 天前
Java I/O核心操作实战
人工智能·1024程序员节