Gulp && Grunt
gulp
用自动化构建工具增强你的工作流程!
易于使用
,通过代码优于配置的策略,Gulp 让简单的任务简单,复杂的任务可管理。构建快速
,利用 Node.js 流的威力,你可以快速构建项目并减少频繁的 IO 操作。插件高质
,Gulp 严格的插件指南确保插件如你期望的那样简洁高质得工作。易于学习
,通过最少的 API,掌握 Gulp 毫不费力,构建工作尽在掌握:如同一系列流管道。
安装
1 | npm install gulp -g //全局安装 |
gulpfile.js
1 | var gulp = require('gulp'); |
运行
1 | gulp //默认执行default任务 |
Task 可以通过 gulp <task> <othertask>
方式来执行。如果只运行 gulp
命令,则会执行所注册的名为 default
的 task,如果没有这个 task,那么 gulp 会报错。
gulp与grunt区别
Grunt
主要是以文件为媒介来运行它的工作流的,比如在Grunt中执行完一项任务后,会把结果写入到一个临时文件中,然后可以在这个临时文件内容的基础上执行其它任务,执行完成后又把结果写入到临时文件中,然后又以这个为基础继续执行其它任务…就这样反复下去。
而在Gulp
中,使用的是Nodejs中的stream(流),首先获取到需要的stream,然后可以通过stream的 pipe()
方法把流导入到你想要的地方,比如Gulp的插件中,经过插件处理后的流又可以继续导入到其他插件中,当然也可以把流写入到文件中。所以Gulp是以stream为媒介的,它不需要频繁的生成临时文件,这也是Gulp的速度比Grunt快的一个原因。
API介绍
掌握四个API即可
gulp.task()
//定义一个使用 Orchestrator 实现的任务(task)。gulp.src()
//输出(Emits)符合所提供的匹配模式(glob)或者匹配模式的数组(array of globs)的文件。gulp.dest()
//能被 pipe 进来,并且将会写文件。并且重新输出(emits)所有数据,因此你可以将它 pipe 到多个文件夹。如果某文件夹不存在,将会自动创建它。gulp.watch()
//监视文件,并且可以在文件发生改动时候做一些事情。它总会返回一个 EventEmitter 来发射(emit) change 事件。
grunt
Grunt
是 JavaScript 世界的构建工具。
为什么要用grunt
?
Grunt
生态系统非常庞大,并且一直在增长。由于拥有数量庞大的插件可供选择,因此,你可以利用 Grunt 自动完成任何事,并且花费最少的代价,只要配置好 Gruntfile
文件, 就可以实现自动执行。
每次运行 grunt
时,他就利用 node
提供的 require()
系统查找本地安装的 Grunt
。正是由于这一机制,你可以在项目的任意子目录中运行grunt
。如果找到一份本地安装的 Grunt
,CLI
就将其加载,并传递Gruntfile
中的配置信息,然后执行你所指定的任务。
安装
1 | npm install -g grunt-cli //全局安装 |
Gruntfile
Gruntfile
主要有以下几个模块组成。
- “wrapper” 函数
- 项目与任务配置
- 加载grunt插件和任务
- 自定义任务
wrapper函数
1 | module.exports = function(grunt) { |
项目和任务配置
1 | grunt.initConfig({ |
加载插件和任务
1 | // 加载能够提供"uglify"任务的插件。 |
自定义任务
1 | // Default task(s),可添加执行多个任务 |
Grunt配置
Grunt
的 task
配置都是在 Gruntfile
中的 grunt.initConfig
方法中指定的。
此配置主要是以任务名称命名的属性,也可以包含其他任意数据。一旦这些代表任意数据的属性与任务所需要的属性相冲突,就将被忽略。