gulp使用笔记
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: task 、 dest 、 src 、 watch ,除此之外,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使用笔记的更多相关文章
- gulp学习笔记4
gulp系列学习笔记: 1.gulp学习笔记1 2.gulp学习笔记2 3.gulp学习笔记3 4.gulp学习笔记4 之前的任务都是单个的,比较简单.接下去我们开始引用多个插件,一次性把任务搞定,省 ...
- gulp学习笔记1
gulp系列学习笔记: 1.gulp学习笔记1 2.gulp学习笔记2 3.gulp学习笔记3 4.gulp学习笔记4 1.安装gulp 首先我们需要node环境,nodejs安装这里就不说了,不懂的 ...
- gulp学习笔记2
gulp系列学习笔记: 1.gulp学习笔记1 2.gulp学习笔记2 3.gulp学习笔记3 4.gulp学习笔记4 1. 压缩 CSS 压缩 css 代码可降低 css 文件大小,提高页面打开速度 ...
- gulp学习笔记3
gulp系列学习笔记: 1.gulp学习笔记1 2.gulp学习笔记2 3.gulp学习笔记3 4.gulp学习笔记4 1.编译sass Sass 是一种 CSS 的开发工具,提供了许多便利的写法,大 ...
- 前端自动化构建工具 gulp 学习笔记 一、
一.我对gulp的初期理解 是一种前端辅助开发工具 可以帮你把js,css,img等文件 合并.压缩,图片好像是合并为精灵图,合并为精灵图之后,还会生成一个css样式表. 官方解说是:基于流的自动化构 ...
- Gulp插件笔记
初次接触Gulp是出于网页模块化的需要,用过之后发现这个任务管理工具有很多实用的插件,意外地好用,于是打算写下这篇笔记把用到的Gulp插件记录一下.至于想了解Gulp基本用法的同学可以去Gulp官网查 ...
- gulp 安装笔记
1.全局安装cnpm(淘宝的npm国内镜像),gulp,rimraf(卸载用插件)npm install -g cnpm --registry=https://registry.npm.taobao. ...
- gulp学习笔记
第一步:安装Node 首先,gulp 是基于 Nodejs 的自动任务运行器,所以安装gulp之前,最基本也最重要的是,我们需要搭建node环境.访问http://nodejs.org,下载并安装No ...
- gulp 学习笔记 (初识)
根据极客学院入门视频整理 一.gulp介绍,主要提到了gulp是基于流式来管理运行的,目前完全搞不懂这一套专业术语. 二.gulp的安装使用. 1.首先需要在全局环境下安装gulp npm insta ...
随机推荐
- LINUX测试环境部署nginx(五)
安装配置nginx 安装编译环境:yum -y install pcre-devel openssl openssl-devel 拷贝nginx压缩文件到目标目录后,解压tar -zxvf nginx ...
- JS自动格式化输入的数字/千位分隔符
<script> function cc(s){ if(/[^0-9\.]/.test(s)) return "invalid value"; ...
- MsXml创建和解析XML示例
一.MsXml创建XML文档示例 // XmlCreationDemo.cpp #include <stdlib.h> #include <stdio.h> // 引入MSXM ...
- Contiki学习笔记 第一个程序:Hello World
想来想去,还是得先写一个程序,找下感觉,增强一下自信心,那就国际惯例Hello World吧.先到这个网址下一个Instant Contiki 2.7.之所以没用3.0的,是因为有些问题,我源码是下的 ...
- openstack cloudinit 遇坑记
我们在工作中经常会遇到创建云主机的情况,但是很少遇到给云主机改主机名的情况. 一台云主机的 hostname 一旦确定可能会涉及到很多东西,有些应用是依赖hostname的. 今天devops组的同 ...
- 收集一些有用的docker镜像
https://hub.docker.com/explore/ 是star排名靠前的image =================================================== ...
- Tomcat启动脚本
记录一个比较好的tomcat启动脚本,截取<OneinStack>,修改如下两个参数即可用. 使用之前修改下面2个参数: #Location of JAVA_HOME (bin files ...
- Linux下使用ping快速检测存活主机
该shell脚本主要是通过ping来批量检测网段内存活主机,执行结果保存在脚本当前目录下的IPinfor目录中,写的比较匆忙,希望大家留下更好的建议. #!/usr/bin/env bash##### ...
- Java中的队列Queue,优先级队列PriorityQueue
队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...
- 【转】Java代码规范
[转]Java代码规范 http://blog.csdn.net/huaishu/article/details/26725539