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. centos svn 升级

    在服务器的/etc/yum.repos.d/下新建个文件夹,wandisco-svn.repo [WandiscoSVN]name=Wandisco SVN Repobaseurl=http://op ...

  2. javascript 正在加载中,请稍后效果实现

    /*蒙版*/ .loading-mask { width: 100%; height: 100%; position: fixed; top:; left:; right:; bottom:; bac ...

  3. 分析案例:应用服务器W3WP进程CPU持续超过百分之九十(Oracle客户端Bug)

    问题描述: 项目反馈应用负载的其中一台服务器业务操作的响应非常慢,登录该服务器发现W3WP进程CPU持续超过90%,哪怕在业务低峰期也是如此?远程查看后发现该应用服务器承载的请求确实很低,why??? ...

  4. 安卓界面控件屏幕居中Layout例子

    经典的登录界面例子: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  5. mybatisGenerator 代码自动生成报错 Result Maps collection already contains value for BaseResultMap--转

    转自:http://blog.csdn.net/tan3739/article/details/7555665 Exception in thread "main" Java.la ...

  6. Discuz模拟批量上传附件发帖

    简介 对于很多用discuz做资源下载站来说,一个个上传附件,发帖是很繁琐的过程.如果需要批量上传附件发帖,就需要去模拟discuz 上传附件的流程. 模拟上传 discuz 附件逻辑 dz附件储存在 ...

  7. Hibernate实体生成JSON的问题及解决

    1.延迟加载所造成的代理对象无法正常序列化的问题 在实体类上添加注解: @JsonIgnoreProperties({ "hibernateLazyInitializer", &q ...

  8. dotNet下的一套解决方案

    很久没在博客园写文章了,打算把一直由自己一个人写的一整套系统开放出来,今天先放一些截图及可以演示的地址! 这套系统包含数据层(HB.Data).计划任务(HB.PlanTask).日志系统(HB.Lo ...

  9. 原生js+本地储存登录注册

    //简易操作,只能当前页面储存一个username和password. <!DOCTYPE html> <html> <head> <meta charset ...

  10. 【巩固】JS中的封闭空间

    封闭空间的主要思想在于: JS中给一个变量外面加小括号,是不改变任何结果的.比如 var show = function(){ //定义一个名字为show的函数 ); }; show(); //调用名 ...