美文网首页Linux学习之路我用 LinuxLinux
nvm和n的区别,以及avn自动切换node版本

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

作者: whisshe | 来源:发表于2018-03-29 11:50 被阅读153次

    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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/jrrmcftx.html