BUG

nvm-windows的使用及踩坑

记录了nvm-windows的使用与排坑

Yixuan Lang
2022-03-01
5 min

# nvm-windows 使用及踩坑

nvm-windows

# 一、nvm-windows 的下载

在我们的日常开发中经常会遇到这种情况:手上有好几个项目,每个项目的需求不同,进而不同项目必须依赖不同版的 NodeJS 运行环境。如果没有一个合适的工具,这个问题将非常棘手。

nvm 是专门用于解决上述问题的工具,而 nvm-windows 是针对 windows 系统的,可以进行多个版本的 node 管理与下载。

# 1. 下载

📁 下载地址 现最新版本已更新至 v1.1.9

image-20220407231434898

  • nvm-noinstall.zip: 这个是绿色免安装版本,但是使用之前需要配置
  • nvm-setup.zip:这是一个安装包,下载之后点击安装,无需配置就可以使用,方便
  • Source code(zip):zip 压缩的源码
  • Sourc code(tar.gz):tar.gz 的源码,一般用于*nix 系统

# 2. 安装

🚨 在安装前,需要卸载以前已经安装的 node 版本,否则会发生冲突

image-20220407232939591 image-20220407233005003

🚨 注意:

  • 这里用 “添加 node.js 的安装目录” 的说法其实不太准确,准确的说法应该是配置 node.js 的安装目录。默认会使用 C:\Program Files\nodejs 目录,C:\Program Files\nodejs 目录也是 node.js 默认的安装目录。
  • 如果读者在安装 nvm 前就已经安装了 node.js,且修改了 node.js 的安装目录,那么此处的目录要修改为 node.js 的安装目录
  • 如果读者在安装 nvm 前没有安装 node.js,那么此处的目录可自行定义。

# 3. 检查是否安装成功

使用命令行工具输入 nvm version,若显示相应的版本证明安装成功

image-20220407233341065

# 二、nvm-windows 的使用

下面罗列了一些 nvm-windows 的常用命令

命令 描述
nvm install latest 安装最新的 node.js 版本
nvm use 版本号 使用某一具体的 node 版本, nvm use 14.3.0
nvm list 显示当前已经安装的所有版本 nvm
nvm ls 列出当前已安装的所有版本
nvm uninstall 版本号 卸载某一具体版本,例如:nvm use 14.3.0
nvm ls available windows 版本,列出全部可以安装的 node 版本
nvm current 显示当前的版本
nvm alias 给不同的版本号添加别名
nvm unalias 删除已定义的别名

其他的一些不常用命令

nvm arch [32|64]: 显示node是运行在32位还是64位模式。指定32或64来覆盖默认体系结构。
-nvm install [arch]:该可以是node.js版本或最新稳定版本latest。(可选[arch])指定安装32位或64位版本(默认为系统arch)。设置[arch]为all以安装32和64位版本。在命令后面添加–insecure,可以绕过远端下载服务器的SSL验证。
nvm list [available]:列出已经安装的node.js版本。可选的available,显示可下载版本的部分列表。这个命令可以简写为nvm ls [available]。
nvm on: 启用node.js版本管理。
nvm off: 禁用node.js版本管理(不卸载任何东西)
nvm proxy [url]: 设置用于下载的代理。留[url]空白,以查看当前的代理。设置[url]为none删除代理。
nvm node_mirror [url]:设置node镜像,默认为https://nodejs.org/dist/.。可以设置为淘宝的镜像https://npm.taobao.org/mirrors/node/
nvm npm_mirror [url]:设置npm镜像,默认为https://github.com/npm/npm/archive/。可以设置为淘宝的镜像https://npm.taobao.org/mirrors/npm/
nvm uninstall : 卸载指定版本的nodejs。
nvm use [version] [arch]: 切换到使用指定的nodejs版本。可以指定32/64位[arch]。
-nvm use :将继续使用所选版本,但根据提供的值切换到32/64位模式
nvm root [path]: 设置 nvm 存储node.js不同版本的目录 ,如果未设置,将使用当前目录。
-nvm version: 显示当前运行的nvm版本,可以简写为nvm v

# 三、nvm-windows 踩坑

# 1. nvm 下载速度慢

由于 nvm 默认的下载地址http://nodejs.org/dist/是外国外服务器,国内很慢可以使用淘宝的镜像

修改settings.txt在你安装的 nvm 目录下找到settings.txt文件,打开settings.txt文件后,加上下面两行代码:

image-20220407235301368
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

# 2. nvm use 乱码

下载完相应版本的 node.js 使用 nvm use 命令进行切换时,报错并且乱码

报错提示:

exit status 145: ���������ִ�������������ִ������������

exit status 1: ��û��� 㹻 ��Ȩ��ִ�д˲�����

# (1) nvm use exit status 1: Access is denied

🤕 问题:这个错误码主要是源自于使用者的权限不足,因此不论你使用底下哪一个指令都有可能会发生

🧐 解决方案:解决方式其实算是满简单的,只需要针对终端机、PowerShell or 命令提示字元点右键使用「以系统管理者身份执行」就可以正常使用了。

# (2) exit status 145: The directory is not empty

🧐 ① 检查安装 nvm 路径与设置放置 nodejs 的路径或文件,是否出现空格或中文

比如默认安装路径 C:\Program Files 中出现了空格

如果有,更改路径或文件夹名称后再使用 nvm use

🧐 ② 安装 nvm 前是否原本就有 nodejs 其它版本

如果有,且安装过程中选择合并了以前版本,可以删除 nvm 中所有 nodejs 版本(主要是安装 nvm 前就有的版本),重新安装所需 nodejs,再运行 nvm use

# 3. nvm 安装 node 没有 npm

使用 nvm 安装新的 node 版本后切换版本号,发现 npm 没有,执行 npm 命令的时候报 npm 命令不存在。运行 npm -v 也查不到 npm 的版本号。

说明我们在用 nvm 安装的 node 版本是没有安装 npm 的,以下有两种解决方式:

# (1) 更改配置文件,自动下载 npm

1、命令行运行:nvm root 显示出 nvm 的安装目录 2、打开 nvm 文件夹下的 settings.txt 文件,在最后添加以下代码:

node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

将下载镜像源指向淘宝(这步也很重要,否则在安装 node 的时候会出现卡死,npm 安装不成功的情况) 3、打开 cmd,nvm install v 版本号 4、打开 nvm 文件中对应版本号的 node_modules 文件夹,可以看到 npm 文件,则说明 npm 安装成功

# 2、手动安装 node 对应的 npm 版本

我没有尝试过这种方法,记录一下,如果有对这种方法比较感兴趣的,可以试一下。 是因为在使用 NVM 安装 node 的时候不会默认安装 npm,所以需要我们自己下载后放到 nvm 对应的 node 目录下面

npm 下载地址:http://npm.taobao.org/mirrors/npm/ (下载对应版本的 zip 文件) node 版本对应 npm 版本:https://nodejs.org/zh-cn/download/releases/

下载完成后将 zip 文件解压到 nvm 安装目录中对应的 node 版本中的 node_modules 目录下 解压在“X:\XXX\node_modules”下 ,然后将文件夹的名称改为 npm

最后将 npm 文件夹里面的 bin 目录下的 npm 和 npm.cmd 两个文件复制一份到对应 node 版本的根目录下