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. 配置DNS服务器,实现局域网内的地址正反向解析

    这里会用到BIND(Berkeley Internet Name Domain) 首先查询下本地bind有没有安装 yum list all | grep "^bind" 如果没有 ...

  2. FPGA书籍

    Xilinx FPGA开发实用教程(第2版) 徐文波,田耘 著

  3. MongoDB学习笔记八:复制

    [主从复制]最基本的复制方式就是建立一个主节点和一个或多个从节点,每个从节点要知道主节点的地址.运行mongod --master启动主服务器.运行mongod --slave --source ma ...

  4. 【java规则引擎】之Drools之Rete算法

    一:规则引擎--->规则引擎的核心是Pattern Matcher(模式匹配器).不管是正向推理还是反向推理,首先要解决一个模式匹配的问题.--->对于规则的模式匹配,可以定义为: 一个规 ...

  5. js 循环切换图片

    function changeLot(){ var minIndex = 1; var maxIndex = 100; var curIndex = 10; var src = $("ul ...

  6. B-index、bitmap-index、text-index使用场景详解

    索引的种类:B-tree索引.Bitmap索引.TEXT index1.  B-tree索引介绍: B-tree 是一种常见的数据结构,也称多路搜索树,并不是二叉树.B-tree 结构可以显著减少定位 ...

  7. 成员资格、授权 – ASP.NET MVC 4 系列

           ASP.NET MVC 不像 ASP.NET WEB FORMS 那样提供了很多自动保护机制来保护页面不受恶意用户的攻击,更明确的说,后者是致力于使应用程序免受攻击: 服务器组件对显示的 ...

  8. 欢迎你,phpWeChat 开发者

    感谢您使用 phpWeChat 来作为自己网站或者微信公共号的开发工具.phpWeChat 是一款高效.稳定的网站+微信公共号内容管理系统(CMS),也可称之为一个PHP开发框架. phpWeChat ...

  9. CentOS 7 vs CentOS 6的不同

    (1)桌面系统 [CentOS6] GNOME 2.x [CentOS7] GNOME 3.x(GNOME Shell) (2)文件系统 [CentOS6] ext4 [CentOS7] xfs (3 ...

  10. 重装系统后,delphi7打开报错

    delphi7运行不正常的提示unable to rename'c:\program files\Borland\delphi7\Bin\delphi32.$$$'to'c:\program file ...