nvm和n的区别,以及avn自动切换node版本

2018-3-29

在服务器上经常会有不同的项目需要不同版本的情况,这时候需要使用node版本管理软件来管理多个版本的node

node管理软件nvm和n的区别

现在主流的node版本管理工具有两个,nvm和n。
它们有各自的特性,适合不同的场景

  • n

n命令是node的一个模块,也就是说必须是在有node环境的情况下才能进行node的版本管理的。

# n的全局安装命令      
npm install -g n

在安装完成之后,就可以使用n来管理不同版本的node。
n在切换不同版本的node时,会将指定版本的node,复制进/usr/local/bin下。由于普通用户没有权限对该目录进行写操作,所以需要sudo来进行提权。

n的没有对全局模块进行管理,所有版本的node模块都是放在/usr/local/lib/node_modules下的,因此有可能在切换了node版本后出现模块错误的情况。

  • nvm

nvm是一个独立的软件包,不需要依存node环境,反过来是node依赖于nvm。

# nvm安装方法
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash

安装完成后检查一下本地的shell配置(~/.zshrc~/.bashrc),看是否有如下配置

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

然后重载一次配置就可以使用nvm了

source ~/.bashrc   #bash环境
source ~/.zshrc   #zsh环境
nvm install node-version #升级指定版本的node

nvm安装实际是将不同的node版本存储进~/.nvm/node-version内,然后修改PATH,将指定版本的node路径加入,这样就实现了切换node版本

如何选择

使用nvm

  1. node版本较多较复杂,需要考虑node模块的兼容性
  2. 本机以后会有更多node项目(还是node模块兼容)
  3. 不在乎硬盘空间(不同版本都会安装自有的node模块)

使用n

  1. windows用户
  2. 不存在node模块冲突
  3. 节约硬盘空间(只会保留一份全局node模块)
  4. 觉得修改bashrc配置麻烦

avn自动切换node版本

在不同的项目需要切换不同版本的node,如果node版本过多的话,每次使用nvm或者n切换比较麻烦,这时候需要使用一个叫avn的工具

  • avn

avn是一个node模块,支持nvm,n。

# 安装方法
npm install -g avn avn-nvm avn-n #按需要安装nvm版或者n版的
avn setup

在项目的根目录放一个.node-version的文件,按照semver的格式书写版本号,例如:8.9.4,然后在进入该项目目录的时候avn会自动切换node版本。

按照上面的方法做了发现avn并没有自动的切换node版本

是因为avn默认是将配置写入到 ~/.zshrc里面的,所以需要将avn的配置加到你所用的shell环境,如bash是在 ~/.bashrc

# 将avn配置写入~/.bashrc
echo  " [[ -s "$HOME/.avn/bin/avn.sh" ]] && source "$HOME/.avn/bin/avn.sh" " >> ~/.bashrc
# 重载bashrc
source ~/.bashrc

参考

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

https://www.jianshu.com/p/a1db0f75866c

https://www.helplib.com/GitHub/article_110290

    原文作者:whisshe
    原文地址: https://www.jianshu.com/p/faa3e32055ce
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞