概述
Gulp 是基于 NodeJS 的自动任务运行器,它可以自动化地完成测试、合并、压缩、格式化、生成文件、监听文件等任务
相比于 Grunt 的频繁 IO 操作,Gulp 的流操作更快,Gulp 还借鉴了 Unix 的管道(pipe)思想,前一级的输出直接变成后一级的输入
前提准备
在项目下安装gulp
和需要使用的插件,比如下例中使用的 gulp-less 和 gulp-livereload
配置文件 gulpfile.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| var gulp = require("gulp"), less = require("gulp-less"), livereload = require("gulp-livereload");
gulp.task("testless", function() { gulp .src("src/less/*.less") .pipe(less()) .pipe(gulp.dest("src/css")) .pipe(livereload()); });
gulp.task("watch", function() { livereload.listen(); gulp.watch("src/less/**/*.less", ["testless"]); });
gulp.task("default", ["watch"]);
|
运行 gulp
gulp watch
(gulp
也会执行 default 任务,即 watch)
创建插件
编写插件内容
先用npm init
创建package.json
,然后在入口建立 main 所对应的 js 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| var through = require("through2");
module.exports = function gulp_prefix(prefix_text) { if (!prefix_text) { prefix_text = ""; } var prefix = new Buffer(prefix_text);
var stream = through.obj(function(file, encoding, callback) { if (!file.isBuffer()) { return callback(); }
file.contents = Buffer.concat([prefix, file.contents]);
this.push(file);
callback(); });
return stream; };
|
through.obj
传入的参数会覆盖stream._transform
函数,file:文件数据,encoding:编码方式,callback(error,data)回调函数
使用插件
在要使用该插件的项目里编写gulpfile.js
1 2 3 4 5 6 7 8 9
| var gulp = require("gulp"), prefix = require("gulp-prefix");
gulp.task("default", function() { gulp .src("src/*.js") .pipe(prefix("prefix data")) .pipe(gulp.dest("js")); });
|
运行gulp
就 ok 啦