美文网首页
正确的安装和使用nvm

正确的安装和使用nvm

作者: jiayifang1 | 来源:发表于2020-05-07 12:07 被阅读0次

    前言

    目前主流的node版本管理工具有两种,nvm和n。两者差异挺大的,具体分析可以参考一下淘宝FED团队的一篇文章:

    管理 node 版本,选择 nvm 还是 n?

    总的来说,nvm有点类似于 Python 的 virtualenv 或者 Ruby 的 rvm,每个node版本的模块都会被安装在各自版本的沙箱里面(因此切换版本后模块需重新安装),因此考虑到需要时常对node版本进行切换测试兼容性和一些模块对node版本的限制,我选择了使用nvm作为管理工具,下面就来说说nvm的安装和使用过程。

    安装

    这里主要介绍mac的安装(linux可以参照),windows系统的话可以参考windows

    不推荐的安装方法

    一开始我是使用homebrew来安装的,安装命令如下:

    brew install nvm
    
    

    安装完后,为了让你可以直接在shell使用nvm指令,必须在你的 .bash_profile 加入以下这行(习惯把设定放在.bashrc的人可以把以下的.bash_profile改成.bashrc)(注:如果没有这个文件,可以touch创建)

    source $(brew --prefix nvm)/nvm.sh
    
    

    或者直接输入以下这行来加入

    $ echo "source $(brew --prefix nvm)/nvm.sh" >> .bash_profile
    
    

    记得重新source你的 .bash_profile 来让设定生效

    $ . ~/.bash_profile
    
    

    OK,以上就完成了nvm的安裝.

    我们来装一下 node v5.12.0

    nvm install 5
    
    

    安装成功后,使用nvm use 来切换版本

    nvm use v5.12.0
    
    

    然而出现错误如下:

    image
    nvm use v4.6.2
    
    

    也是如此:

    nvm is not compatible with the npm config "prefix" option: currently set to "/Users/fabian/.nvm/versions/node/v0.12.7"
    Run `nvm use --delete-prefix v4.6.2` to unset it.
    
    

    所以只能安装提示,使用

    nvm use --delete-prefix v4.6.2
    
    

    成功切换。

    至于为什么用homebrew安装会出现上面的问题,可参考Github上的一个issue

    查看nvm文档发现:文档中Installation 那一小节倒数第二行有一句Homebrew installation is not supported.,由此可见,没事儿还是要多看看文档。

    推荐的安装方法

    一、卸载已安装到全局的 node/npm

    如果之前是在官网下载的 node 安装包,运行后会自动安装在全局目录,其中

    node 命令在 /usr/local/bin/node ,npm 命令在全局 node_modules 目录中,具体路径为 /usr/local/lib/node_modules/npm

    安装 nvm 之后最好先删除下已安装的 node 和全局 node 模块:

    npm ls -g --depth=0 #查看已经安装在全局的模块,以便删除这些全局模块后再按照不同的 node 版本重新进行全局安装
    
    sudo rm -rf /usr/local/lib/node_modules #删除全局 node_modules 目录
    sudo rm /usr/local/bin/node #删除 node
    cd  /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm #删除全局 node 模块注册的软链
    
    
    二、安装 nvm
    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
    
    

    安装完成后请重新打开终端环境,Mac 下推荐使用 oh-my-zsh 代替默认的 bash shell。
    安装完成后,发现使用nvm install stable 安装node速度很慢,原因嘛,大概大家都知道我大天朝的国情。
    接下来介绍如何使用国内镜像快速安装node:
    把环境变量 NVM_NODEJS_ORG_MIRROR, 那么我建议你加入到 .bash_profile 文件中:

    # nvm
    export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
    
    

    然后你可以继续非常方便地安装各个版本的 node 了, 你可以查看一下你当前已经安装的版本:

    $ nvm ls
             nvm
         v0.8.26
        v0.10.26
        v0.11.11
    ->  v4.3.2
    
    
    三、使用 cnpm 加速 npm

    同理 nvm , npm 默认是从国外的源获取和下载包信息, 不慢才奇怪.
    可以通过简单的 ---registry 参数, 使用国内的镜像 https://registry.npm.taobao.org :

    $ npm --registry=https://registry.npm.taobao.org install koa
    
    

    于是屏幕又哗啦哗啦地一大片输出:

    $ npm --registry=https://registry.npm.taobao.org install koa
    npm http GET https://registry.npm.taobao.org/koa
    npm http 200 https://registry.npm.taobao.org/koa
    ...
    npm http 200 https://registry.npm.taobao.org/negotiator
    npm http 200 https://registry.npm.taobao.org/keygrip
    koa[@0](/user/0).5.2 node_modules/koa
    ├── koa-compose[@2](/user/2).2.0
    ├── statuses[@1](/user/1).0.2
    ├── finished[@1](/user/1).1.1
    ├── escape-html[@1](/user/1).0.1
    ├── only[@0](/user/0).0.2
    ├── debug[@0](/user/0).8.0
    ├── fresh[@0](/user/0).2.2
    ├── type-is[@1](/user/1).0.1
    ├── delegates[@0](/user/0).0.3
    ├── mime[@1](/user/1).2.11
    ├── co[@3](/user/3).0.5
    ├── accepts[@1](/user/1).0.1 (negotiator[@0](/user/0).4.2)
    └── cookies[@0](/user/0).4.0 (keygrip[@1](/user/1).0.0)
    
    

    但是毕竟镜像跟官方的 npm 源还是会有一个同步时间差异, 目前 cnpm 的默认同步时间间隔是 15 分钟.
    如果你是模块发布者, 或者你想马上同步一个模块, 那么推荐你安装 cnpm cli:

    $ npm --registry=https://registry.npm.taobao.org install cnpm -g
    
    

    通过 cnpm 命令行, 你可以快速同步任意模块:

    $ cnpm sync koa connect mocha
    
    

    呃, 我就是不想安装 cnpm cli 怎么办? 哈哈, 早就想到你会这么懒了, 于是我们还有一个 web 页面:

    例如我想马上同步 koa, 直接打开浏览器: https://npm.taobao.org/sync/koa

    或者你是命令行控, 通过 open 命令打开:

    $ open https://npm.taobao.org/sync/koa
    
    

    如果你安装的模块依赖了 C++ 模块, 需要编译, 肯定会通过 node-gyp 来编译,
    node-gyp 在第一次编译的时候, 需要依赖 node 源代码, 于是又会去 node dist 下载,
    于是大家又会吐槽, 怎么 npm 安装这么慢…

    好吧, 于是又要提到 --disturl 参数, 通过七牛的镜像来下载:

    $ npm --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/mirrors/node install microtime
    
    

    再次要提到 cnpm cli, 它已经默认将 --registry 和 --disturl 都配置好了, 谁用谁知道
    如果不想使用cnpm cli,可以

    npm config set registry https://registry.npm.taobao.org --global
    npm config set disturl https://npm.taobao.org/dist --global
    
    

    nvm常用命令

    • nvm install <version> ## 安装指定版本,可模糊安装,如:安装v4.4.0,既可nvm install v4.4.0,又可nvm install 4.4

    • nvm uninstall <version> ## 删除已安装的指定版本,语法与install类似

    • nvm use <version> ## 切换使用指定的版本node

    • nvm ls ## 列出所有安装的版本

    • nvm ls-remote ## 列出所以远程服务器的版本(官方node version list)

    • nvm current ## 显示当前的版本

    • nvm alias <name> <version> ## 给不同的版本号添加别名

    • nvm unalias <name> ## 删除已定义的别名

    • nvm reinstall-packages <version> ## 在当前版本node环境下,重新全局安装指定版本号的npm包

    附:MAC 打开.bash_profile

    1. 启动终端Terminal

    2. 进入当前用户的home目录

        输入cd ~
    
    
    1. 创建.bash_profile
        输入touch .bash_profile
    
    
    1. 编辑.bash_profile文件
        输入open -e .bash_profile
    
    
    1. 保存文件,关闭.bash_profile

    2. 更新刚配置的环境变量

        输入source .bash_profile
    
    

    Linux中profile、bashrc、bash_profile之间的区别和联系

    补充:

    nvm临时切换与永久切换

    临时切换

    nvm use <版本号>
    
    

    临时切换版本,只在当前终端内有效,新开终端无效。

    image

    永久切换

    nvm alias default <版本号>
    nvm alias default node
    
    

    只有新开的shell生效。已经打开的shell无论是否执行alias命令,均不生效。不写版本号,而使用node字样的话,就是永远使用最新安装的node版本。

    作者:极客教程
    链接:https://www.jianshu.com/p/1d3430c427ef
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:正确的安装和使用nvm

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