前言

目前主流的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

切换版本

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 ~
  3. 创建.bash_profile
    输入touch .bash_profile
  4. 编辑.bash_profile文件
    输入open -e .bash_profile
  5. 保存文件,关闭.bash_profile

  6. 更新刚配置的环境变量
    输入source .bash_profile

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

转自:https://www.imooc.com/article/14617

正确的安装和使用nvm(mac)<转>的更多相关文章

  1. 正确的安装和使用nvm

    前言 目前主流的node版本管理工具有两种,nvm和n.两者差异挺大的,具体分析可以参考一下淘宝FED团队的一篇文章: 管理 node 版本,选择 nvm 还是 n? 总的来说,nvm有点类似于 Py ...

  2. 如何快速正确的安装 Ruby, Rails 运行环境

    如何快速正确的安装 Ruby, Rails 运行环境 https://ruby-china.org/wiki/install_ruby_guide 对于新入门的开发者,如何安装 Ruby, Ruby ...

  3. 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述

    对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...

  4. Windows下安装及使用NVM

    Windows下安装及使用NVM 所谓nvm就是一个可以让你在同一台机器上安装和切换不同版本node的工具.这里是一篇安装及使用教程. 第一步:下载nvm 可以到github上下载最新版本https: ...

  5. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装爬虫框架Scrapy(离线方式和在线方式)(图文详解)

    不多说,直接上干货! 参考博客 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装OpenCV(离线方式和在线方式)(图文详解) 第一步:首先,提示升级下pip 第二步 ...

  6. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装OpenCV(离线方式和在线方式)(图文详解)

    不多说,直接上干货! 说明: Anaconda2-5.0.0-Windows-x86_64.exe安装下来,默认的Python2.7 Anaconda3-4.2.0-Windows-x86_64.ex ...

  7. 全网最全的Windows下Python2 / Python3里正确下载安装用来向微信好友发送消息的itchat库(图文详解)

    不多说,直接上干货! 建议,你用Anaconda2或Anaconda3. 见 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来向微信好友发送消息的itchat库( ...

  8. Tomcat安装笔记(on Mac)

    1. 官网 http://tomcat.apache.org/ 下载apache包,我下的8.5 注意要下core包的tgz版本,我开始下了full doc. 2. 拷贝解压到 /Library, 然 ...

  9. Linux 安装Zookeeper<准备>(使用Mac远程访问)

    阅读本文需要安装JDK 一 Zookeeper简介 zookeeper是用java语言编写的一款为分布式应用所设计的协调服务 zookeeper是apacahe hadoop的子项目 使用zookee ...

随机推荐

  1. JavaScript中的普通函数和构造函数

    在写JavaScript代码过程中,用到需要写构造函数的地方不多,但还是需要详细了解一下 本文尽量描述清楚什么是JavaScript中的构造函数,以及普通函数和构造函数的区别

  2. 阶段3 3.SpringMVC·_07.SSM整合案例_07.ssm整合之编写MyBatis框架测试保存的方法

    再写一个测试的方法,测试save保存的方法 需要提交事务才能保存到数据库

  3. IntelliJ IDEA 2018 for Mac专业使用技巧

    IntelliJ IDEA 2018 for Mac是一个综合性的Java编程环境,被许多开发人员和行业专家誉为市场上最好的IDE,它提供了一系列最实用的的工具组合:智能编码辅助和自动控制,支持J2E ...

  4. Nginx实现负载均衡的方式有哪几种呢?

    什么是负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃.为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力. 我们 ...

  5. Go语言入门篇-网络经验

    Go语言学习手册 golang*看云  golang圣经 wuYinIO 1.go语言开发中的坑 go新手容易犯的三个致命错误   Golang 需要避免踩的 50 个坑 2.go语言数据类型 map ...

  6. VS2008新增文件没有模板

    可能是我安装的过程中发神经没有选中选项什么的,打开来想建个项目发现一个模板都没有,那就很尴尬了,作为对开发工具极度依赖的人,这真的难受... 在网上找到别人的办法 开始 –> 程序 –> ...

  7. PTA(Advanced Level)1036.Boys vs Girls

    This time you are asked to tell the difference between the lowest grade of all the male students and ...

  8. (4.16)mysql备份还原——物理备份之XtraBackup实践

    关键词:XtraBackup实践,物理备份,xtrabackup备份,innobackupex备份 [1]如何使用? [3]系列:innobackupex --help |more [4]系列:xtr ...

  9. PTA-迷宫寻路(输出最短路径)

    给定一个M行N列的迷宫图,其中 "0"表示可通路,"1"表示障碍物,无法通行.在迷宫中只允许在水平或上下四个方向的通路上行走,走过的位置不能重复走. 5行8列的 ...

  10. reids集群状态正常redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster

    重新启动redis集群时启动失败,报错: redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachab ...