n与nvm的选择
管理NodeJs版本的两种方法比较
n
n 是一个需要全局安装的 npm package。
npm install -g n
这意味着,我们在使用n
管理node
版本前,首先需要一个node
环境。我们或者用Homebrew
来安装一个node
,或者从官网下载 pkg 来安装,总之我们得先自己装一个node
,n
本身是没法给你装的。
然后我们可以使用n
来安装不同版本的node
。 在安装的时候,n
会先将指定版本的node
存储下来,然后将其复制到我们熟知的路径 /usr/local/bin
,非常简单明了。当然由于n
会操作到非用户目录,所以需要加sudo
来执行命令。 所以这样看来,n
在其实现上是一个非常易理解的方案
nvm
nvm
不是一个 npm package,而是一个独立软件包。这意味着我们需要单独使用它的安装逻辑:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash
或者使用 Homebrew
来安装。
nvm
显然比n
要复杂一些,但是另一方面,由于它是一个独立软件包,因此它和 node
之间的关系看上去更合乎逻辑:nvm
不依赖node
环境,是node
依赖 nvm;而不像n
那样产生类似循环依赖的问题。但是nvm硬编码的路径(硬编码了版本号)。
如何选择?
这样看下来,nvm
和n
的差异还是比较大的,具体体现在:
- 安装简易度。
nvm
安装起来显然是要麻烦不少;
-n
这种安装方式更符合node
的惯性思维。
- 系统支持。
nvm
不支持 Windows。
- 对全局模块的管理。
-n
对全局模块毫无作为,因此有可能在切换了node
版本后发生全局模块执行出错的问题;nvm
的全局模块存在于各自版本的沙箱中,切换版本后需要重新安装,不同版本间也不存在任何冲突。
- 关于
node
路径。
-n
是万年不变的/usr/local/bin
;nvm
需要手动指定路径。
nvm安装
安装
使用curl方式来安装:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash
完成后nvm就被安装在了~/.nvm
下,这个版本已经会自动配置环境变量
如果没有的话参考zsh的配置 打开~/.zshrc
,在最后一行加上:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
重启zsh,输入nvm
可以查看到相关信息
使用
查看可安装的NodeJs版本
- 使用
nvm ls-remote
看一下node有哪些版本可以安装,会显示超级多多版本 - 使用
nvm ls-remote --lts
查看所有可以安装的LTS版本(长期支持版)
安装对应版本
- 使用
nvm install <版本号>
安装对应版本
nvm install v14.15.5
查看已经安装多版本
- 使用
nvm ls
命令 - 进入
/Users/fangchang/.nvm/versions/node/
目录下查看
切换版本
nvm use <版本号>
nvm use v14.15.5 Now using node v14.15.5 (npm v6.14.11)
node -v
确认
设定默认的 node 版本
设定默认的node版本
nvm alias default <版本号>
nvm alias default v14.15.5 default -> v14.15.5
打开新的终端,用
nvm current
查看当前版本显示nvm current v14.15.5
卸载指定版本的node【未验证】
用户权限提升 当使用
nvm uninstall <node版本号>
的时候,通常会被提示:nvm uninstall v14.15.5 file is not writable or self-owned: $NVM_DIR/versions/node/v14.15.5/bin/cnpm Cannot uninstall, incorrect permissions on installation folder. This is usually caused by running `npm install -g` as root. Run the following commands as root to fix the permissions and then try again. chown -R username "$NVM_DIR/versions/node/v14.15.5" chmod -R u+w "$NVM_DIR/versions/node/v14.15.5"
最后两行的意思是: 第1行:把指定目录的所有者改为 username 所有,这里 username 是用户名,可以改成 $(whoami) 避免输入错误。所以先输入以下命令(使用sudo):
sudo chown -R $(whoami) "$NVM_DIR/versions/node/v14.15.5"
第2行:u+w中u表示所有者,+表示增加权限,w表示可写入。整句表示对目录所有者增加写入权限。所以再输入(使用sudo):
sudo chmod -R u+w "$NVM_DIR/versions/node/v14.15.5"
删除指定版本 node 当用户有了权限之后,就可以删除指定版本的 node
nvm uninstall v14.15.5 Uninstalled node v14.15.5