node.js 一个奇葩的版本帝,曾经也为了跟上 node 版本管理 发布的步伐。每一次 node 版本的发布,都重新源码编译安装一次。而且每次编译安装 node 版本管理 之后全局安装的 npm 包命令,会全部失效。


原因:源码安装包的路径是相同的位置,新安装的 node.js 重写覆盖了 lib/node_modules 目录。

如果切换之前的 node 版本环境,该怎么办?第一想到的是:每次安装 node.js 到不同的路径。这样虽然保留了 node 版本,但系统存在 node 命令,应该指向哪个版本呢?

1
2
3
4
5
ln -s /usr/bin/node /usr/local/node-4
# or
ln -s /usr/bin/node /usr/local/node-6
# or
ln -s /usr/bin/node /usr/local/node-8

这样切换环境,非常不方便。

直到有一天,遇到 nvm-node 版本管理

nvm 是一个独立软件包,在类 unix 的操作系统下,安装命令:

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

mac os 还可以使用 Homebrew 来安装

在安装的时候,nvm 将不同的 node 版本存储到 ~/.nvm// 下,然后修改 $PATH,将指定版本的 node 路径加入,这样我们调用的 node 命令即是使用指定版本的 node。

nvm 显然比 n 要复杂一些,但是另一方面,由于它是一个独立软件包,因此它和 node 之间的关系看上去更合乎逻辑:nvm 不依赖 node 环境,是 node 依赖 nvm;而不像 n 那样产生类似循环依赖的问题。

node 版本管理 常用操作:

1
2
3
4
5
6
7
8
9
nvm list # 显示已经安装的 node 版本

nvm install v0.10.32 # 安装 v0.10.32

nvm run 0.10.32 app.js # 使用 0.10.32 这个版本的 node,执行 app.js

nvm use 0.10.32 # 切换当前 node 版本到 0.10.32,以后在当前窗口使用 node 执行的脚本的版本,都是 0.10.32。

nvm alias default 0.10.32 # 把 0.10.32 作为 node 的默认版本,开机,新建终端窗口的 node 版本都会是 0.10.32

node 版本管理 示例:

-> 代表着当前使用的 node 版本

本文地址 https://shaoshilei.com/2018-05/nvm.html