使用nvm管理NodeJs版本


n与nvm的选择


管理NodeJs版本的两种方法比较

n

n 是一个需要全局安装的 npm package。

npm install -g n

这意味着,我们在使用n管理node版本前,首先需要一个node环境。我们或者用Homebrew来安装一个node,或者从官网下载 pkg 来安装,总之我们得先自己装一个noden本身是没法给你装的。
然后我们可以使用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硬编码的路径(硬编码了版本号)。

如何选择?

这样看下来,nvmn的差异还是比较大的,具体体现在:

  • 安装简易度。
    • nvm安装起来显然是要麻烦不少;
      -n这种安装方式更符合node的惯性思维。
  • 系统支持。
    • nvm不支持 Windows。
  • 对全局模块的管理。
    -n对全局模块毫无作为,因此有可能在切换了node版本后发生全局模块执行出错的问题;
    • nvm的全局模块存在于各自版本的沙箱中,切换版本后需要重新安装,不同版本间也不存在任何冲突。
  • 关于node路径。
    -n是万年不变的 /usr/local/bin
    • nvm需要手动指定路径。

参考:http://taobaofed.org/blog/2015/11/17/nvm-or-n/

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

    参考:https://www.jianshu.com/p/0cfeed299f2a


  目录