工欲善其事,必先利其器 -- nvm

2022/01/17 Config 共 1364 字,约 4 分钟

当项目不止一个的时候,当项目所在的时间轴很长时,其项目所需的 node 版本,大概率会有所不同,这时暴露出来一个问题:如何合理的管理我们的 node 版本呢?

现在常见的两种方式:nvm 和 n。那么这两者有什么区别呢?接下来,让我们揭开它们神秘的面纱~

nvmn 的不同

nvm 是一个命令,来管理 node.js 版本,对于多个 node.js 版本,它是创建了多个目录来存放 node.js 的代码,实现了完全隔离,即沙箱这种方式。切换版本也是通过修改 node 路径所对应的文件夹目录。

n 呢,是一个 npm 全局包命令,切换版本是将安装的 node 版本复制到 /usr/local/bin 目录下。多版本之间没有很强的隔离。甚至会出现全局包错误问题。

因此,我更推荐使用 nvm 来做 node.js 的版本管理器。

nvm 安装

之前令人难以选择的是,Windows 用户无法使用 nvm,对于版本管理,只好选择 n 了,但现在而言,nvm 也是有 Windows 版本的。传送门

这里简单复制部分,链接:官方文档安装方式

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

需要注意的是在执行完安装脚本后,也要检查确认终端文件中是否有这一段代码。(~/.bash_profile, ~/.zshrc, ~/.profile, or ~/.bashrc),这个看你的终端使用的是什么了,比如我的是 zsh,那么文件就是 .zshrc 了。

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

这段代码的意思是:

  1. 声明 nvm 的目录所在路径,
  2. 加载 nvm,
  3. 加载 nvm bash_completion。

这样,在终端内就可以使用 nvm 命令了

nvm 使用

常用的几个 nvm 命令

  • nvm ls 查看本地安装的 node.js 版本列表
  • nvm install *** 安装 *** 版本
  • nvm use *** 在当前终端窗口使用某个版本
  • nvm alias default *** 设置某个版本为默认(新开终端窗口 or 重新打开终端生效)

至于其他的命令,可以用 nvm help 查看。

nvm 需要注意的地方

由于切换版本是沙箱式,隔离 100%,故 npm 全局依赖在切换版本后,都需要重新安装一番了。这就是享受安全、互不影响的另一端了。事物都有双面性不是~

因此可以用 npm list -g --depth=0 快速查看全局安装了哪些依赖,嘿嘿,再安装一遍呗。

补充,nrm

再补充一个小工具:一个管理 npm 源的 nrm。

咋一看两者还挺像的,nvm 是 node.js 的版本管理,nrm 是 npm 源的管理。谁让前端是个大杂烩呢。

(nvm: node version manager, nrm: npm registry manager)

什么时候会用到 nrm,如:国内 npm 源访问太慢,公司内部有自己的 npm 仓库,这时候切换源,用 nrm 就很方便。

安装与使用

npm i nrm -g

nrm ls
nrm use ${name}

文档信息

Search

    Table of Contents