使用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 相关文章推荐
js 覆盖和重载 函数
Sep 25 Javascript
js 操作select相关方法函数
Dec 06 Javascript
js监听表单value的修改同步问题,跨浏览器支持
Dec 31 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
Oct 06 Javascript
Jquery之Bind方法参数传递与接收的三种方法
Jun 24 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
Mar 02 Javascript
JS解决iframe之间通信和自适应高度的问题
Aug 24 Javascript
Bootstrap选项卡学习笔记分享
Feb 13 Javascript
NestJs 静态目录配置详解
Mar 12 Javascript
基于vue-cli3和element实现登陆页面
Nov 13 Javascript
Javascript Web Worker使用过程解析
Mar 16 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
May 28 Javascript
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 ip2long 出现负数的原因及解决方法
2017/04/05 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
python实现自动化上线脚本的示例
2019/07/01 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
几个常见的软件测试问题
2016/09/07 面试题
领导视察欢迎词
2014/01/15 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
Java实现多线程聊天室
2021/06/26 Java/Android