nvm 与 nrm 的安装与使用

3,261 阅读3分钟

本文介绍了如何使用 nvm 切换 node.js 与 npm 版本,以及如何使用 nrm 切换 npm 下载源。

1. NVM

在开发不同项目时,可能会用到不同版本的 node.js 与 npm,最直接的的方式就是卸载当前版本的 node.js,然后下载安装另一个版本的 node.js。现在使用 nvm 可以帮助我们方便地切换 node.js 与 npm 版本。

先看看 github 上关于 nvm 的介绍 image.png 所以,nvm 是 node.js 版本管理工具。

1.1 卸载 node 与 npm

image.png

  • 在安装 nvm 之前,一定要先卸载已安装的 node.js,否则可能会出现版本冲突,无法切换 node.js 版本等问题
  • 除此之外,还要将之前安装的 npm 全局插件删除掉,否则可能提示 nvm 不是内部或外部命令的问题

windows 用户

  1. 设置中找到应用,搜索 node,卸载 image.png
  2. 删除之前安装的 npm 全局插件,找到以下文件目录中的 npm 插件,删除
    C:\Users\a\AppData\Roaming\npm
    C:\Users\a\AppData\Roaming\npm-cache
    
  3. 验证是否卸载成功
    node -v
    npm -v
    
  4. 重启电脑

macos 用户

image.png

  1. 要先卸载 npm
    sudo npm uninstall npm -g
    
  2. 再卸载 node.js
    sudo rm -rf /usr/local/lib/node /usr/local/lib/node\_modules /var/db/receipts/org.nodejs.\*
    sudo rm -rf /usr/local/include/node /Users/\$USER/.npm
    sudo rm /usr/local/bin/node
    sudo rm /usr/local/share/man/man1/node.1
    sudo rm /usr/local/lib/dtrace/node.d
    
  3. 验证是否卸载成功
    node -v
    npm -v
    
  4. 重启电脑

1.2 安装 nvm

打开 github,搜索 nvm,找到 nvm-sh/nvmcoreybutler/nvm-windows image.png

windows 用户

  1. 点击进入 coreybutler/nvm-windows,找到 README.md,点击 Download Now image.png
  2. 在 releases 页面找到对应版本的 nvm 安装包,下载安装即可。这里使用了最新的安装包,按照 manual installation 指南操作。如果 nvm 安装后没有立马生效,重启 terminal 或 powershell image.png
  3. nvm 安装完成之后,在终端输入 nvm -v 测试,提示版本就表示成功
  4. 每次切换 node 版本,都需要重新全局 install 一下包管理器
    nvm use 14.0.0
    npm install -g yarn
    nvm use 12.0.1
    npm install -g yarn
    

macos 用户

  1. 点击进入 nvm-sh/nvm,找到 README.md,点击 Installing and Updating image.png

  2. 在终端输入安装脚本 image.png

    curl -o- <https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh> | bash
    

    在苹果 10.15.7这个版本上(macOS Catalina),执行安装脚本 image.png

  3. 安装确认

    在终端输入 nvm -v 测试

    • 提示版本就表示成功
    • 提示 zsh: command not found: nvm 说明未生效。

    输入命令 source \~/.bash\_profile 依旧未生效 image.png

  4. 回到 README.md 中,寻找解决办法 image.png 重新打开一个终端,输入 nvm -v,好了

    nvm -v
    0.39.3
    

1.3 升级 nvm

windows用户

image.png

1.4 使用 nvm

windows 用户

输入 nvm 即可查看所用命令

  • nvm version:显示当前运行的 nvm 版本
  • nvm install <version>:可以指定版本安装,也可以输入 latest、lts image.png
  • nvm list:列出已安装的 node.js image.png 当前 node 版本是14.18.1,对应 npm 版本是 6.14.15 image.png
  • nvm use <version>:切换 node.js 版本 image.png
  • nvm uninstall <version>:卸载指定版本的 node.js
  • 关于国区速度慢的小伙伴,在 nvm 目录下找到 settings.txt 文件,添加下面两行代码
    root: C:\nvm
    path: C:\Program Files\nodejs
    
    nvm node_mirror https://npm.taobao.org/mirrors/node/
    nvm npm_mirror https://npm.taobao.org/mirrors/npm/
    
    image.png

macos 用户

输入 nvm 即可查看所用命令 image.png

使用示例

Example:
  nvm install 8.0.0                     Install a specific version number
  nvm use 8.0                           Use the latest available 8.0.x release
  nvm run 6.10.3 app.js                 Run app.js using node 6.10.3
  nvm exec 4.8.3 node app.js            Run `node app.js` with the PATH pointing to node 4.8.3
  nvm alias default 8.1.0               Set default node version on a shell
  nvm alias default node                Always default to the latest available node version on a shell

  nvm install node                      Install the latest available version
  nvm use node                          Use the latest version
  nvm install --lts                     Install the latest LTS version
  nvm use --lts                         Use the latest LTS version

  nvm set-colors cgYmW                  Set text colors to cyan, green, bold yellow, magenta, and white

Note:
  to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)
  • nvm --version:显示当前运行的 nvm 版本 image.png

  • nvm install <version>:可以指定版本安装,也可以输入 latest、lts

    image.png

  • nvm list:列出已安装的 node.js image.png 当前 node 版本是14.18.1,对应 npm 版本是 6.14.15 image.png

  • nvm use <version>:切换 node.js 版本 image.png

  • nvm uninstall <version>:卸载指定版本的 node.js

1.5 离线环境

windows用户

如果我们在离线环境中(比如某些不让上互联网的公司),如何继续使用 nvm 神器呢?

  1. 首先依然要将离线电脑里原来安装的 node 与 npm 统统卸载或删除掉

  2. 找到 nvm 安装包,即 nvm-setup.exe, 双击进行安装

  3. 完了在终端输入 nvm -v ,若显示版本号就表示安装成功

  4. 找到之前在 node 官网下载好的不同版本的 node.js 的 release版本image.png往下滚动,就可以看到不同版本的 node.js image.png比如选择 v20.15.0 这个版本的 node.js,点击发行版,选择 release 版本进行下载 image.png

  5. 将压缩包解压至 nvm 安装路径的根目录下,并统一使用 v + 版本号 的格式命名文件夹(注意该文件夹只有一层!!!),完了在终端输入 nvm ls 测试是否存在刚才解压出来的 node 版本

  6. 在终端输入 nvm use 版本号 ,若显示 Now using node v20.15.0 即切换node版本成功

  7. 如果成功,那就可以愉快地 use 其他版本的 node.js 了

2. NRM

nrm 全称 NPM registry manager,镜像源管理工具。

2.1 依赖包的源从哪里来?

直接使用 npm 命令安装依赖包,安装速度可能会很慢甚至出现异常,因为使用 npm 命令安装依赖包默认是从国外服务器下载的。

当我们 npm install 速度太慢或出现异常,亦或要使用公司内部定制的私有源时,就要切换 npm 源了。

如何切换 npm 源?

  • 查看当前 npm 源

    $ npm config get registry
    
  • npm 源设置为 taobao 镜像源

    $ npm config set registry=https://registry.npm.taobao.org/
    

    切换了源,接下来就要 npm install 了,其实也可以直接指定源去安装依赖包

    $ npm install --registry=https://registry.npm.taobao.org/
    
  • 切换回 npm 源

    $ npm config set registry=https://registry.npmjs.org/
    

上面的操作仅仅是修改了下载依赖包的源,npm 指令还是不变的,每次切换源都要输一长串源地址,这就很烦!那我们想,能否在使用 npm 源与 taobao 镜像源时,使用不同的指令呢?

2.2 不得不说的 taobao 镜像源

image.png

  • 我们可以使用淘宝定制的 cnpm命令行工具 代替默认的 npm

    $ npm install -g cnpm --registry=https://registry.npmmirror.com
    
  • 安装模块

    $ cnpm install [moduleName]
    
  • 同步模块

    直接通过 sync 命令马上从 npm 同步一个模块, 只有 cnpm 命令行才有此功能

    $ cnpm sync [moduleName]
    

这样,我们就可以使用 npm 命令行去操作 npm 源,使用 cnpm 命令行去操作 taobao 镜像源。

2.3 nrm -- NPM registry manager

npm 源的地址是 registry.npmjs.org/ ,taobao 镜像源的地址是 registry.npmmirror.com/ ,依赖包的源肯定不止这俩,源地址一多,就需要集中管理,那 nrm 就是我们要的 npm 依赖包管理工具

2.4 安装与使用 nrm

  1. 全局安装 nrm

    $ npm install -g nrm@1.0.0
    $ nrm -V
    $ nrm --version
    

    image.png

  2. 添加源

    主要适用于公司内部定制的私有源

    $ nrm add [自定义源名称] 源地址
    $ nrm add <registry> <url>
    $ nrm add yarn https://registry.yarnpkg.com/
    $ nrm add taobao https://registry.npmmirror.com/
    
  3. 查看源

    $ nrm ls
    
    * npm ------- https://registry.npmjs.org/
      yarn ------ https://registry.yarnpkg.com/
      tencent --- https://mirrors.cloud.tencent.com/npm/
      cnpm ------ https://r.cnpmjs.org/
      taobao ---- https://registry.npmmirror.com/
      npmMirror - https://skimdb.npmjs.com/registry/
    
  4. 切换源

    nrm use taobao
    
  5. 测试源的响应速度

    $ nrm test
    
      npm ---- 843ms
      cnpm --- 13238ms
      taobao - 12287ms
      nj ----- Fetch Error
      rednpm - 175ms
      npmMirror  959ms
      edunpm - Fetch Error
    * coding - 12314ms
    
  6. 删除源

    $ nrm del coding