简单谈谈node.js 版本控制 nvm和 n


Posted in Javascript onOctober 15, 2015

今天的话题包括2个部分

1. node.js 下使用 nvm 或者 n 来进行版本控制
2. nvm 安装node.js 版本后,重启终端 node , npm 环境变量失效

第一部分 用什么来管理 node.js 版本

首先应该欢呼庆祝一下 node.js 终于发布了有历史意义的正式版 1.0 ,虽然我们看到的是V4.0,其实他就是node.js 真正意义的 1.0, io.js 不负众望,完成了它的使命.

回头看这几年node.js 以及 io.js 的发展速度,各种版本的迭代发布,我们很有必要用一个 node.js 的版本管理工具来控制当前系统的 node.js 版本.

为什么这样做?

在新的版本中已经用上了最新的V8引擎,ES 6的所有新特性一展身手,你能忍得住吗?
但是,如果你鲁莽升级,第一个问题是 你的开发环境和线上发布环境可能不一样,那么后果就不用多少了,出了问题 等着老板来鞭尸吧.
第二个问题 可能是之前的一些开源包需要重新编译,尤其是 c++ 模块写的.

所以,你需要一个 node.js 的版本管理软件

现在流行的 node.js 版本管理有哪些?

nvm

我们使用  brew 安装 nvm

brew install nvm

这里要注意
brew 安装后一定要在你的 bash 或者 zsh 配置文件中设置一下,否则 当你重新启动终端,你会发现 node ,npm 环境变量都失效了

这里要穿插说一下我们要分享的第二个话题
nvm 重启后终端 node ,npm 失效的解决方案

如果你使用了上面的 brew 的安装方法
当安装成功后,请按照如下操作设置你的 shell 配置文件

brew info nvm

你会看到下面的输出帮助信息

nvm: stable 0.26.1 (bottled), HEAD
Manage multiple Node.js versions
https://github.com/creationix/nvm
/usr/local/Cellar/nvm/0.26.1 (3173 files, 56M) *
 Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/nvm.rb
==> Caveats
Add NVM's working directory to your $HOME path (if it doesn't exist):

 mkdir ~/.nvm

Copy nvm-exec to NVM's working directory

 cp $(brew --prefix nvm)/nvm-exec ~/.nvm/

Add the following to $HOME/.bashrc, $HOME/.zshrc, or your shell's
equivalent configuration file:

 export NVM_DIR=~/.nvm
 source $(brew --prefix nvm)/nvm.sh

Type `nvm help` for further information.

Bash completion has been installed to:
 /usr/local/etc/bash_completion.d

我们需要按照上面提供的方法,首先在用户更目录下 创建 .nvm 文件

mkdir ~/.nvm

然后把 nvm-exec 文件拷贝到你刚才新建的 .nvm 目录下

cp $(brew --prefix nvm)/nvm-exec ~/.nvm/

然后去编辑你的 bash 配置文件 $HOME/.bashrc ,如果你  使用 zsh 那么编辑 $HOME/.zshrc 配置文件

nano ~/.bashrc

nano ~/.zshrc

把下面的内容粘贴进去

export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh

最后让你的 shell 配置及时生效

source ~/.bashrc


`source ~/.zshrc'

最后你就不会再出现关闭终端重启,或者重启机器发现 node ,npm 等系统环境变量失效的问题了.

nvm 和 n 的区别

nvm 类似于 Python 的 virtualenv 或者 Ruby 的 rvm ,它是一个独立安装的软件
n 其实是一个 npm 全局的开源包 ,需要使用 npm 来全局安装
n 更加轻巧,但是 nvm 更加独立.

假如你有一台新带电脑,如果你想使用 版本管理,那么 nvm 是你的选择,因为它的独立的软件,安装后你可以随意下载切换你需要的版本.

但是 n 是依赖在 npm 下的一个包,也就是说 你的电脑环境还没有 node / npm 的时候,你还用不了 n .
所以在使用的时候,大家可以针对自己的情况权衡.我本人使用 nvm 来控制 node 版本.

nvm 使用

查看可以安装的版本

nvm ls-remote

查看已经安装的版本

nvm ls

安装一个指定的版本

nvm install <version>

上面的 version 可以指定你在 nvm ls-remote 里面列出来的版本号即可

删除指定版本

nvm use <version>

n 的安装

npm install -g n

当然,你还可以去 github 下载你的源代码自己本地编译

$ git clone https://github.com/visionmedia/n.git
$ cd n
$ [sudo] make install
n 安装指定版本
n stable/laster/< version>

在 n 后面更一个标识 stable 标识最新稳定版, laster 标识最新版 ,<version> 就是你可以具体指定一个版本号

n 使用一个版本
n use <version>

n 删除一个版本
n rm <version>
Javascript 相关文章推荐
帮助避免错误的Javascript陷阱清单
May 31 Javascript
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
Nov 25 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
Mar 04 Javascript
JS对象的深度克隆方法示例
Mar 16 Javascript
详解vue-cli开发环境跨域问题解决方案
Jun 06 Javascript
原生JS 购物车及购物页面的cookie使用方法
Aug 21 Javascript
css和js实现弹出登录居中界面完整代码
Nov 26 Javascript
vue项目中公用footer组件底部位置的适配问题
May 10 Javascript
vue-cli项目代理proxyTable配置exclude的方法
Sep 20 Javascript
layui使用表格渲染获取行数据的例子
Sep 13 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
Sep 01 Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
Oct 15 #Javascript
JS实现选中当前菜单后高亮显示的导航条效果
Oct 15 #Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
Oct 15 #Javascript
JS利用cookie记忆当前位置的防刷新导航效果
Oct 15 #Javascript
如何实现移动端浏览器不显示 pc 端的广告
Oct 15 #Javascript
JS简单限制textarea内输入字符数量的方法
Oct 14 #Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
Oct 14 #Javascript
You might like
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
php警告Creating default object from empty value 问题的解决方法
2014/04/02 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
Javascript的构造函数和constructor属性
2010/01/09 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
python如何通过protobuf实现rpc
2016/03/06 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
英国医生在线预约:Top Doctors
2019/10/30 全球购物
美术教学感言
2014/02/22 职场文书
银行内勤岗位职责
2014/04/09 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
财务工作失误检讨书
2015/02/19 职场文书
安全生产学习心得体会
2016/01/18 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
在python中实现导入一个需要传参的模块
2021/05/12 Python