本文介绍了如何使用 nvm 切换 node.js 与 npm 版本,以及如何使用 nrm 切换 npm 下载源。
1. NVM
在开发不同项目时,可能会用到不同版本的 node.js 与 npm,最直接的的方式就是卸载当前版本的 node.js,然后下载安装另一个版本的 node.js。现在使用 nvm 可以帮助我们方便地切换 node.js 与 npm 版本。
先看看 github 上关于 nvm 的介绍
所以,nvm 是 node.js 版本管理工具。
1.1 卸载 node 与 npm
- 在安装 nvm 之前,一定要先卸载已安装的 node.js,否则可能会出现版本冲突,无法切换 node.js 版本等问题
- 除此之外,还要将之前安装的 npm 全局插件删除掉,否则可能提示 nvm 不是内部或外部命令的问题
windows 用户
- 在设置中找到应用,搜索 node,卸载
- 删除之前安装的 npm 全局插件,找到以下文件目录中的 npm 插件,删除
C:\Users\a\AppData\Roaming\npm C:\Users\a\AppData\Roaming\npm-cache - 验证是否卸载成功
node -v npm -v - 重启电脑
macos 用户
- 要先卸载 npm
sudo npm uninstall npm -g - 再卸载 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 - 验证是否卸载成功
node -v npm -v - 重启电脑
1.2 安装 nvm
打开 github,搜索 nvm,找到 nvm-sh/nvm 与 coreybutler/nvm-windows
windows 用户
- 点击进入 coreybutler/nvm-windows,找到 README.md,点击 Download Now
- 在 releases 页面找到对应版本的 nvm 安装包,下载安装即可。这里使用了最新的安装包,按照 manual installation 指南操作。如果 nvm 安装后没有立马生效,重启 terminal 或 powershell
- nvm 安装完成之后,在终端输入
nvm -v测试,提示版本就表示成功 - 每次切换 node 版本,都需要重新全局 install 一下包管理器
nvm use 14.0.0 npm install -g yarn nvm use 12.0.1 npm install -g yarn
macos 用户
-
点击进入 nvm-sh/nvm,找到 README.md,点击 Installing and Updating
-
在终端输入安装脚本
curl -o- <https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh> | bash在苹果 10.15.7这个版本上(macOS Catalina),执行安装脚本
-
安装确认
在终端输入
nvm -v测试- 提示版本就表示成功
- 提示
zsh: command not found: nvm说明未生效。
输入命令
source \~/.bash\_profile依旧未生效 -
回到 README.md 中,寻找解决办法
重新打开一个终端,输入
nvm -v,好了nvm -v 0.39.3
1.3 升级 nvm
windows用户
1.4 使用 nvm
windows 用户
输入 nvm 即可查看所用命令
nvm version:显示当前运行的 nvm 版本nvm install <version>:可以指定版本安装,也可以输入 latest、ltsnvm list:列出已安装的 node.js当前 node 版本是14.18.1,对应 npm 版本是 6.14.15
nvm use <version>:切换 node.js 版本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/
macos 用户
输入 nvm 即可查看所用命令
使用示例
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 版本 -
nvm install <version>:可以指定版本安装,也可以输入 latest、lts -
nvm list:列出已安装的 node.js当前 node 版本是14.18.1,对应 npm 版本是 6.14.15
-
nvm use <version>:切换 node.js 版本 -
nvm uninstall <version>:卸载指定版本的 node.js
1.5 离线环境
windows用户
如果我们在离线环境中(比如某些不让上互联网的公司),如何继续使用 nvm 神器呢?
-
首先依然要将离线电脑里原来安装的 node 与 npm 统统卸载或删除掉
-
找到 nvm 安装包,即
nvm-setup.exe, 双击进行安装 -
完了在终端输入
nvm -v,若显示版本号就表示安装成功 -
找到之前在 node 官网下载好的不同版本的 node.js 的 release版本
往下滚动,就可以看到不同版本的 node.js
比如选择 v20.15.0 这个版本的 node.js,点击发行版,选择 release 版本进行下载
-
将压缩包解压至 nvm 安装路径的根目录下,并统一使用
v + 版本号的格式命名文件夹(注意该文件夹只有一层!!!),完了在终端输入nvm ls测试是否存在刚才解压出来的 node 版本 -
在终端输入
nvm use 版本号,若显示Now using node v20.15.0即切换node版本成功 -
如果成功,那就可以愉快地 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 镜像源
-
我们可以使用淘宝定制的 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
-
全局安装 nrm
$ npm install -g nrm@1.0.0 $ nrm -V $ nrm --version -
添加源
主要适用于公司内部定制的私有源
$ nrm add [自定义源名称] 源地址 $ nrm add <registry> <url> $ nrm add yarn https://registry.yarnpkg.com/ $ nrm add taobao https://registry.npmmirror.com/ -
查看源
$ 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/ -
切换源
nrm use taobao -
测试源的响应速度
$ nrm test npm ---- 843ms cnpm --- 13238ms taobao - 12287ms nj ----- Fetch Error rednpm - 175ms npmMirror 959ms edunpm - Fetch Error * coding - 12314ms -
删除源
$ nrm del coding