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 版本下)"。

相关推荐
凉虾皮3 小时前
2024包河初中组
学习·算法·1024程序员节
jdlxx_dongfangxing3 小时前
C++ STL 容器与算法详解
开发语言·c++·1024程序员节
PandaCave3 小时前
记录画图笔记
1024程序员节
前端与小赵3 小时前
我的创作纪念日
1024程序员节
最好结果3 小时前
MyBatis 精确查询逗号分隔字符串
mysql·mybatis·1024程序员节
消失的旧时光-19433 小时前
搞懂 Kotlin 的 List、Set、Map、HashMap、LinkedHashMap,以及 asSequence() 的底层原理与实战场景。
kotlin·数据处理·1024程序员节
明道源码3 小时前
Kotlin 面向对象编程、主构造函数、次构造函数、伴生对象、数据类、继承
kotlin·1024程序员节
遥远_3 小时前
Spring Boot微服务健康检测:保障系统稳定性的关键实践
spring boot·微服务·1024程序员节·健康检测
程序员杰哥3 小时前
如何使用Postman做接口自动化测试及完美的可视化报告?
自动化测试·软件测试·python·测试工具·jenkins·postman·1024程序员节