gulp简介

gulp 是基于 Nodejs 的自动任务运行器,能自动化地完成javascript/coffee/sass/less/html/image/css等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。在实现上, gulp 借鉴了Unix操作系统的管道(pipe)思想,就是前一级的输出,直接变成后一级的输入,使其在操作上非常简单.

安装

gulp是基于node的自动任务运行器,所以需要事先安装好node.

1.全局安装gulp:

$ npm install --global gulp

2.需要在项目的根目录下创建一个配置文件gulpfile.js:

var gulp = require('gulp');

gulp.task('default', function() {
// 默认的任务代码
});

3.运行gulp:

$ gulp

默认的名为 default 的任务(task)将会被运行,在这里,这个任务并未做任何事情。

需要单独执行特定的任务(task),需要输入 gulp <task> <othertask>

API

gulp在git上介绍了四个API: taskdestsrcwatch ,除此之外,gulp还提供了一个 run 方法。

1.gulp.src(globs[, options])

src() 方法是指定需要处理的源文件的路径,gulp借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,gulp.src返回当前文件流至可用插件。

参数:

globs: 需要处理的源文件匹配符路径

options: 有3个属性buffer、read、base

globs 的文件匹配说明:

“src/a.js”:指定具体文件;

“*”:匹配所有文件 例:src/*.js(包含src下的所有js文件);

“**”:匹配0个或多个子文件夹 例:src/**/*.js(包含src的0个或多个子文件夹下的js文件);

“{}”:匹配多个属性 例:src/{a,b}.js(包含a.js和b.js文件) src/*.{jpg,png,gif}(src下的所有jpg/png/gif文件);

“!”:排除文件 例:!src/a.js(不包含src下的a.js文件);

options.buffer : 类型: Boolean 默认:true 设置为false,将返回file.content的流并且不缓冲文件,处理大文件时非常有用;

options.read : 类型: Boolean 默认:true 设置false,将不执行读取文件操作,返回null;

options.base : 类型: String ,会加在glob之前

想像一下在一个路径为 client/js/somedir 的目录中,有一个文件叫 somefile.js

gulp.src('client/js/**/*.js') // 匹配 'client/js/somedir/somefile.js'
.pipe(minify())
.pipe(gulp.dest('build')); // 写入 'build/somedir/somefile.js' gulp.src('client/js/**/*.js', { base: 'client' })
.pipe(minify())
.pipe(gulp.dest('build')); // 写入 'build/js/somedir/somefile.js'并且将 `base` 解析为 `client/js/`

2.gulp.dest(path[, options])

dest()方法是指定处理完后文件输出的路径

path:指定文件输出路径,或者定义函数返回文件输出路径也可

options:有两个属性,cwd和mode

options.cwd:类型: String 默认值: process.cwd().输出目录的 cwd 参数,只在所给的输出目录是相对路径时候有效。

optoins.mode:类型: String 默认值: 0777.八进制权限字符,用以定义所有在输出目录中所创建的目录的权限。

gulpfile.js像这样:

var gulp = require('gulp');
gulp.task('testtask', function() {
gulp.src('./js/test.js')
.pipe(gulp.dest('./build'));
});

利用 gulp.dest('./build') 将新建的test.js文件移动到了build目录,对比前后两次的 ls -al 命令, dest() 会自动创建目录。

3.gulp.task(name[, deps], fn)

这个方法用来创建一个gulp任务。

参数说明:

name:任务名称,如果需要在命令行中运行某些任务,那么,请不要在名字中使用空格。

deps:类型: Array.一个包含任务列表的数组,这些任务会在当前任务运行之前完成。

gulp.task('mytask', ['array', 'of', 'task', 'names'], function() {
// 做一些事
});

注意: 任务是否在这些前置依赖的任务完成之前运行了?请一定要确保所依赖的任务列表中的任务都使用了正确的异步执行方式:使用一个 callback,或者返回一个 promise 或 stream。

fn:该函数定义任务所要执行的一些操作。通常来说,它会是这种形式:gulp.src().pipe(someplugin())

如果fn可以接收callback,或者返回一个promise或stream,任务可以异步执行:

接收callback:

// 在 shell 中执行一个命令
var exec = require('child_process').exec;
gulp.task('jekyll', function(cb) {
// 编译 Jekyll
exec('jekyll build', function(err) {
if (err) return cb(err); // 返回 error
cb(); // 完成 task
});
});

返回stream:

gulp.task('somename', function() {
var stream = gulp.src('client/**/*.js')
.pipe(minify())
.pipe(gulp.dest('build'));
return stream;
});

返回promise:

var Q = require('q');

gulp.task('somename', function() {
var deferred = Q.defer(); // 执行异步的操作
setTimeout(function() {
deferred.resolve();
}, 1); return deferred.promise;
});

4.gulp.watch(glob [, opts], tasks) 或 gulp.watch(glob [, opts, cb])

用于监听文件变化,文件一修改就会执行指定的任务.

参数说明:

glob:类型: String or Array,一个 glob 字符串,或者一个包含多个 glob 字符串的数组,用来指定具体监控哪些文件的变动。

opts:Object,传给gaze的参数。

tasks:类型: Array,需要在文件变动后执行的一个或者多个通过 gulp.task() 创建的 task 的名字.

cb:类型: Function,每次变动需要执行的 callback。

var watcher = gulp.watch('js/**/*.js', ['uglify','reload']);
watcher.on('change', function(event) {
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});

gulp.watch('js/**/*.js', function(event) {
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});

callback 会被传入一个名为 event 的对象。这个对象描述了所监控到的变动:

event.type:类型: String,发生的变动的类型:added, changed 或者 deleted

event.path:类型: String,触发了该事件的文件的路径。

gulp插件

gulp 插件很多, 这里 可以查看完整的列表。

gulp使用笔记的更多相关文章

  1. gulp学习笔记4

    gulp系列学习笔记: 1.gulp学习笔记1 2.gulp学习笔记2 3.gulp学习笔记3 4.gulp学习笔记4 之前的任务都是单个的,比较简单.接下去我们开始引用多个插件,一次性把任务搞定,省 ...

  2. gulp学习笔记1

    gulp系列学习笔记: 1.gulp学习笔记1 2.gulp学习笔记2 3.gulp学习笔记3 4.gulp学习笔记4 1.安装gulp 首先我们需要node环境,nodejs安装这里就不说了,不懂的 ...

  3. gulp学习笔记2

    gulp系列学习笔记: 1.gulp学习笔记1 2.gulp学习笔记2 3.gulp学习笔记3 4.gulp学习笔记4 1. 压缩 CSS 压缩 css 代码可降低 css 文件大小,提高页面打开速度 ...

  4. gulp学习笔记3

    gulp系列学习笔记: 1.gulp学习笔记1 2.gulp学习笔记2 3.gulp学习笔记3 4.gulp学习笔记4 1.编译sass Sass 是一种 CSS 的开发工具,提供了许多便利的写法,大 ...

  5. 前端自动化构建工具 gulp 学习笔记 一、

    一.我对gulp的初期理解 是一种前端辅助开发工具 可以帮你把js,css,img等文件 合并.压缩,图片好像是合并为精灵图,合并为精灵图之后,还会生成一个css样式表. 官方解说是:基于流的自动化构 ...

  6. Gulp插件笔记

    初次接触Gulp是出于网页模块化的需要,用过之后发现这个任务管理工具有很多实用的插件,意外地好用,于是打算写下这篇笔记把用到的Gulp插件记录一下.至于想了解Gulp基本用法的同学可以去Gulp官网查 ...

  7. gulp 安装笔记

    1.全局安装cnpm(淘宝的npm国内镜像),gulp,rimraf(卸载用插件)npm install -g cnpm --registry=https://registry.npm.taobao. ...

  8. gulp学习笔记

    第一步:安装Node 首先,gulp 是基于 Nodejs 的自动任务运行器,所以安装gulp之前,最基本也最重要的是,我们需要搭建node环境.访问http://nodejs.org,下载并安装No ...

  9. gulp 学习笔记 (初识)

    根据极客学院入门视频整理 一.gulp介绍,主要提到了gulp是基于流式来管理运行的,目前完全搞不懂这一套专业术语. 二.gulp的安装使用. 1.首先需要在全局环境下安装gulp npm insta ...

随机推荐

  1. Python 批量修改文件名

    最近下载了几部美剧(越狱.迷失.权利的游戏......),每集文件名都好长好长..想改短一些,但一个一个改太累了,于是写了个脚本来实现批量修改: 修改前文件名: 修改后文件名: 代码实现: #enco ...

  2. 1月11日,HTML学习笔记

    <ul> <li>coffee</li> <li>tea</li> <li>mile</li> </ul> ...

  3. 3数字cn域名延续数字域名火爆行情! 珍品域名 593.cn 出售

      近日, 域名投资者小维放出珍藏多年的珍品域名593.cn, 据悉该域名将参加易名中国举办的数字域名专场拍卖活动,将以1元标价起拍.   域名593.cn,数字“593”谐音“我就上.吾就上.我就商 ...

  4. IE弹出窗口显示URL地址栏

    工具-->Internet 选项-->安全-->自定义级别-->允许网站打开没有地址栏或状态栏的窗口-->禁止

  5. 转载:Java的接口及实例

    转自:http://blog.csdn.net/liujun13579/article/details/7736116/ 一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特 ...

  6. SQL2008中Merge的用法

    在SQL2008中,新增了一个关键字:Merge,这个和Oracle的Merge的用法差不多,只是新增了一个delete方法而已.下面就是具体的使用说明: 首先是对merge的使用说明: merge ...

  7. asp.net4.0在Global中的Application_Start 中直接或间接使用 HttpUtility.UrlEncode等出现异常Response is not available in this context的解决方法

    HttpUtility.HtmlEncode HttpUtility.HtmlDecode HttpUtility.UrlEncode HttpUtility.UrlDecode 也会出现此异常. 这 ...

  8. MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql

    一.MyBatis简介与配置MyBatis+Spring+MySql 1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的J ...

  9. linux下tomcat的安装和配置

    安装前要求: 1. 安装java环境. 2. 配置java环境变量 开始了: 1. 在官网下载tomcat:http://tomcat.apache.org/ 2. linux环境选择.zip或者.t ...

  10. createjs easal.js制作了一个很简单的链路图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...