使用nvm管理不同版本的node与npm的方法


Posted in Javascript onOctober 31, 2017

本文介绍了使用 nvm 管理不同版本的 node 与 npm ,分享给大家,具体如下:

补充说明:Mac 下通过 brew install nvm 所安装的 nvm ,由于安装路径不同,无法正确启用。建议使用 brew uninstall nvm 卸载掉之后,通过本文的方案重新安装一次。

最近 NodeJS 的版本更新速度有点 Chrome 的迹象,4.0 版本没发布多久,又推出了 5.0 。升级 NodeJS 之后可以很方便的开始使用一些 ES6 的语言特性,但又会导致团队内部的mz-fis 框架无法更新,因为它暂时只支持 v0.12 版本。于是团队开始试用管理 node 版本的工具  nvm,试用后发现 Mac 下很好用,推荐大家尽快用起来。

nvm 是 Mac 下的 node 管理工具,有点类似管理 Ruby 的 rvm,如果是需要管理 Windows 下的 node,官方推荐是使用 nvmw 或nvm-windows 。

以下具体说下 Mac 系统中的安装与使用细节(Windows 系统仅供类比参考)。

一、卸载已安装到全局的 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.29.0/install.sh | bash

安装完成后请重新打开终端环境,Mac 下推荐使用oh-my-zsh 代替默认的 bash shell。

三、安装切换各版本 node/npm

nvm install stable #安装最新稳定版 node,现在是 5.0.0
nvm install 4.2.2 #安装 4.2.2 版本
nvm install 0.12.7 #安装 0.12.7 版本

# 特别说明:以下模块安装仅供演示说明,并非必须安装模块
nvm use 0 #切换至 0.12.7 版本
npm install -g mz-fis #安装 mz-fis 模块至全局目录,安装完成的路径是 /Users/<你的用户名>/.nvm/versions/node/v0.12.7/lib/mz-fis
nvm use 4 #切换至 4.2.2 版本
npm install -g react-native-cli #安装 react-native-cli 模块至全局目录,安装完成的路径是 /Users/<你的用户名>/.nvm/versions/node/v4.2.2/lib/react-native-cli

nvm alias default 0.12.7 #设置默认 node 版本为 0.12.7

四、使用 .nvmrc 文件配置项目所使用的 node 版本

如果你的默认 node 版本(通过 nvm alias 命令设置的)与项目所需的版本不同,则可在项目根目录或其任意父级目录中创建 .nvmrc 文件,在文件中指定使用的 node 版本号,例如:

cd <项目根目录> #进入项目根目录
echo 4 > .nvmrc #添加 .nvmrc 文件
nvm use #无需指定版本号,会自动使用 .nvmrc 文件中配置的版本
node -v #查看 node 是否切换为对应版本

五、nvm 与 n 的区别

node 版本管理工具还有一个是 TJ 大神的 n 命令,n 命令是作为一个 node 的模块而存在,而 nvm 是一个独立于 node/npm 的外部 shell 脚本,因此 n 命令相比 nvm 更加局限。

由于 npm 安装的模块路径均为 /usr/local/lib/node_modules ,当使用 n 切换不同的 node 版本时,实际上会共用全局的 node/npm 目录。 因此不能很好的满足『按不同 node 版本使用不同全局 node 模块』的需求。

因此建议各位尽早开始使用 nvm ,以免出现全局模块无法更新的问题。

当然,如果你用的是 windows 操作系统,我只能说 …… 朋友,能不能早点换个 Mac ,做一个有品位的程序猿呢:P

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一步一步教你写一个jQuery的插件教程(Plugin)
Sep 03 Javascript
javascript实现的在当前窗口中漂浮框的代码
Mar 15 Javascript
JavaScript中常用的运算符小结
Jan 18 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
Apr 07 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
Aug 08 Javascript
sogou地图API用法实例教程
Sep 11 Javascript
JavaScript实现的经典文件树菜单效果
Sep 08 Javascript
javascript获取系统当前时间的方法
Nov 19 Javascript
详解获取jq ul第一个li定位的四种解决方案
Nov 23 Javascript
js+canvas实现动态吃豆人效果
Mar 22 Javascript
vue如何使用rem适配
Feb 06 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
javascript高级模块化require.js的具体使用方法
Oct 31 #Javascript
JS简单实现点击跳转登陆邮箱功能的方法
Oct 31 #Javascript
jQuery简单实现对数组去重及排序操作实例
Oct 31 #jQuery
Node.js学习教程之HTTP/2服务器推送【译】
Oct 31 #Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
Oct 31 #Javascript
原生js实现仿window10系统日历效果的实例
Oct 31 #Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
Oct 31 #Javascript
You might like
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
2019/10/30 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
webpack下实现动态引入文件方法
2018/02/22 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
js实现中文实时时钟
2020/01/15 Javascript
微信小程序webSocket的使用方法
2020/02/20 Javascript
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python共享引用(多个变量引用)示例代码
2013/12/04 Python
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
Python基础知识点 初识Python.md
2019/05/14 Python
深入了解python列表(LIST)
2020/06/08 Python
在Python中字典按值排序的实现方法
2020/11/12 Python
为什么需要版本控制?
2013/08/08 面试题
大学生预备党员自我评价分享
2013/11/16 职场文书
优秀毕业生求职信范文
2014/01/02 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
环保建议书范文
2015/09/14 职场文书
JavaScript组合继承详解
2021/11/07 Javascript
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫