grunt vs gulp
来源:互联网 发布:js做表格 编辑:程序博客网 时间:2024/05/16 06:28
github Grunt vs Gulp https://github.com/fwon/blog/issues/16
Gulp相对于Grunt的优势 http://blog.jobbole.com/81007/
W3C tech Grunt VS Gulp http://www.w3ctech.com/topic/673
1. 书写方式
grunt 运用配置的思想来写打包脚本,一切皆配置,所以会出现比较多的配置项,诸如option,src,dest等等。而且不同的插件可能会有自己扩展字段,导致认知成本的提高,运用的时候要搞懂各种插件的配置规则。
gulp 是用代码方式来写打包脚本,并且代码采用流式的写法,只抽象出了gulp.src, gulp.pipe, gulp.dest, gulp.watch 接口,运用相当简单。经尝试,使用gulp的代码量能比grunt少一半左右。
2. 任务划分
grunt 中每个任务对应一个最外层配置的key, 大任务可以包含小任务,以一种树形结构存在。举个栗子:
uglify: {
one: {
src: 'src/a.js',
dest: 'dest/a.min.js'
},
two: {
src: 'tmp/b.js',
dest: 'dist/b.min.js'
}
}
将uglify划分子任务的好处是,我们在封装不同的task时可以分别对'uglify:one'或'uglify:two'进行调用,这对于某些需要在不同时间点调用到uglify的task相当有用。
gulp 中没有子任务的概念,对于上面的需求,只能通过注册两个task来完成
gulp.task('uglify:one', function(){
gulp.src('src/a.js')
.pipe(uglify())
.dest('dest/a.min.js')
});
gulp.task('uglify:two', function(){
gulp.src('tmp/b.js')
.pipe(uglify())
.dest('dist/b.min.js')
});
当然这种需求往往可以通过调整打包策略来优化,并不需要分解子task,特殊情况下可以用这种方法解决。
gulp.js 的作者 Eric Schoffstall 在他介绍 gulp.js 的 presentation 中总结了 Grunt 的几点不足之处:
1. 插件很难遵守单一责任原则。因为 Grunt 的 API 设计缺憾,使得许多插件不得不负责一些和其主要任务无关的事情。比如说要对处理后的文件进行更名操作,你可能使用的是 uglify 插件,也有可能使用的是 concat 插件(取决于工作流的最后一个环节是谁)。
我的看法:这或许是个问题,对很多人来说 Grunt 插件多少存在“职责不明”和“越俎代庖”的情况。在我看来,这也是 Grunt 一个设计思想:把对文件的操作抽象为一个独立的组件(Files),任何插件都以相同的规则来使用它。遗憾在于,使用它的过程发生在每个插件的独立配置对象里,所以总给人一种“把不该这个插件做的事情丢给它来做”的别扭感觉。
2. 用插件做一些本来不需要插件来做的事情。因为 Grunt 提供了统一的 CLI 入口,子任务由插件定义,由 CLI 命令来调用执行,因此哪怕是很简单的外部命令(比如说运行 karma start)都得有一个插件来负责封装它,然后再变成 Grunt CLI 命令的参数来运行,多此一举。
1. 试图用配置文件完成所有事,结果就是混乱不堪。规模较大,构建/分发/部署流程较为复杂的项目,其 Gruntfile有多庞杂相信有经历的人都有所体会。而 gulp.js 奉行的是“写程序而不是写配置”,它走的是一种 node way。
我的看法:对于 node.js 开发者来说这是好事,符合他们的一贯作风;不过对于那些纯前端工程师来说(数量不小),这似乎没有什么显著的改善。况且近来 Grunt 社区涌现了不少插件来帮助开发者组织/管理/简化臃肿的 Gruntfile,效果都还不错。所以关于这一点,就见仁见智吧。
2. 落后的流程控制产生了让人头痛的临时文件/文件夹所导致的性能滞后。这是 gulp.js 下刀子的重点,也是本标题里“流式构建”所解决的根本问题。流式构建改变了底层的流程控制,大大提高了构建工作的效率和性能,给用户的直观感觉就是:更快。
我的看法:关于流式构建,短短几句话无法讲清它的来龙去脉,但是在 node.js 的世界里,streaming 确实是至关重要的。我推荐一份阅读材料:Stream Handbook,读过之后相信心里就有数了。
作为对比和总结,作者列出了 gulp.js 的五大特点:
1. 使用 gulp.js,你的构建脚本是代码,而不是配置文件;
2. 使用标准库(node.js standard library)来编写脚本;
3. 插件都很简单,只负责完成一件事-基本上都是 20 行左右的函数;
4. 任务都以最大的并发数来执行;
5. 输入/输出(I/O)是基于“流式”的。
gulp的工作流程:文件流--文件流--文件流......因为grunt操作会创建临时文件,会有频繁的IO操作,而gulp使用的是流操作,一直是在内存中处理,直到输出结果。 因此gulp在效率上确实远胜grunt,并且学习成本不高.
[图片]
个人更喜欢gulp
- grunt vs gulp
- Grunt VS Gulp
- grunt vs gulp
- Gulp vs Grunt 前端工程构建工具
- Gulp vs Grunt 前端工程的构建工具对比
- 前端工程的构建工具对比 Gulp vs Grunt
- gulp/grunt 安装/案例实战实战 JavaScript构建(编绎)系统大比拼:Grunt vs. Gulp
- gulp神器,Grunt靠边
- Gulp and Grunt
- grunt、gulp 的区别
- 谈谈Grunt,NPM,Gulp
- grunt和gulp对比
- Gulp的目标是取代Grunt
- Gulp与Grunt环境配置问题
- Gulp挑战Grunt,背后的哲学
- 也许你并不需要 Gulp, Grunt ?
- 前端 构建工具 Gulp和 Grunt、npm
- grunt, gulp以及webpack概念和应用
- ORACLE 定期清理INACTIVE会话
- 四个视频营销策略,让你火过傅园慧,Papi酱
- 参考网上的一些struts2的action用法,自己写了一个Demo记录一下。
- 分类问题中的“维数灾难”
- Windows下开发Hadoop程序遇到的坑及解决方案
- grunt vs gulp
- Nginx 和 IIS 实现动静分离
- win7 64bit 旗舰版 挂载为nfs
- 如何判断用户是否为第一次进入app或者是第一次进入指定页面
- 序列化的作用
- 换个图。。。
- Bower
- 时间戳转换成时间字符串
- 我的ubuntu 16.04 安装的东东