node.js中grunt和gulp的区别详解


Posted in Javascript onJuly 17, 2017

node.js中grunt和gulp的区别详解

自nodeJS登上前端舞台,自动化构建变得越来越流行。目前最流行的当属grunt和gulp,这两个光看名字挺像,功能也差不多,不过gulp能在grunt这位大哥如日中天的境况下开辟出自己的一片天地,有着她独到的优点。

  1. 易用 Gulp相比Grunt更简洁,而且遵循代码优于配置策略,维护Gulp更像是写代码。
  2. 高效 Gulp相比Grunt更有设计感,核心设计基于Unix流的概念,通过管道连接,不需要写中间文件。
  3. 高质量 Gulp的每个插件只完成一个功能,这也是Unix的设计原则之一,各个功能通过流进行整合并完成复杂的任务。例如:Grunt的imagemin插件不仅压缩图片,同时还包括缓存功能。他表示,在Gulp中,缓存是另一个插件,可以被别的插件使用,这样就促进了插件的可重用性。目前官方列出的有673个插件。
  4. 易学 Gulp的核心API只有5个,掌握了5个API就学会了Gulp,之后便可以通过管道流组合自己想要的任务。
  5. 使用Grunt的I/O过程中会产生一些中间态的临时文件,一些任务生成临时文件,其它任务可能会基于临时文件再做处理并生成最终的构建后文件。而使用Gulp的优势就是利用流的方式进行文件的处理,通过管道将多个任务和操作连接起来,因此只有一次I/O的过程,流程更清晰,更纯粹。
  6. 代码优于配置 维护Gulp更像是写代码,而且Gulp遵循CommonJS规范,因此跟写Node程序没有差别。

一个简单的Gulpfile.js配置格式

var gulp = require('gulp');
  var jshint = require('gulp-jshint');
  var concat = require('gulp-concat');
  var rename = require('gulp-rename');
  var uglify = require('gulp-uglify');

  // Lint JS
  gulp.task('lint', function() {
  return gulp.src('src/*.js')
    .pipe(jshint())
    .pipe(jshint.reporter('default'));
  });

  // Concat & Minify JS
  gulp.task('minify', function(){
    return gulp.src('src/*.js')
    .pipe(concat('all.js'))
    .pipe(gulp.dest('dist'))
    .pipe(rename('all.min.js'))
    .pipe(uglify())
    .pipe(gulp.dest('dist'));
  });

  // Watch Our Files
  gulp.task('watch', function() {
    gulp.watch('src/*.js', ['lint', 'minify']);
  });

  // Default
  gulp.task('default', ['lint', 'minify', 'watch']);

以上就是node.js中grunt和gulp的区别的讲解,如果大家有疑问请留言或者到本站社区进行讨论交流,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
jQuery操作input type=radio的实现代码
Jun 14 Javascript
JS调用页面表格导出excel示例代码
Mar 18 Javascript
alert出数组中的随即值代码
Sep 25 Javascript
自己动手手写jQuery插件总结
Jan 20 Javascript
Javascript动态创建div的方法
Feb 09 Javascript
JavaScript中apply方法的应用技巧小结
Sep 29 Javascript
Vue.js学习之过滤器详解
Jan 22 Javascript
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
vue 通过下拉框组件学习vue中的父子通讯
Dec 19 Javascript
Vue仿今日头条实例详解
Feb 06 Javascript
优雅的处理vue项目异常实战记录
Jun 05 Javascript
js实现图片3D轮播效果
Sep 21 Javascript
js实现多张图片延迟加载效果
Jul 17 #Javascript
js指定步长实现单方向匀速运动
Jul 17 #Javascript
webpack构建vue项目的详细教程(配置篇)
Jul 17 #Javascript
javascript 跨域问题以及解决办法
Jul 17 #Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
Jul 17 #Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
Jul 17 #Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
Jul 17 #Javascript
You might like
php去除html标记的原生函数详解
2015/01/27 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
ext for eclipse插件安装方法
2008/04/27 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
js实现的万能flv网页播放器代码
2016/04/30 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
python中range()与xrange()用法分析
2016/09/21 Python
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
俄罗斯在线大型超市:ТутПросто
2021/01/08 全球购物
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
优秀村官事迹材料
2014/01/10 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
郭明义电影观后感
2015/06/08 职场文书
教师病假条范文
2015/08/17 职场文书
2019最新激励员工口号大全!
2019/06/28 职场文书
检讨书之工作不认真
2019/08/14 职场文书
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL