Gulp
让简单的任务简单,复杂的任务可管理。Node.js
流的威力,你能够快速构建项目并减小频繁的 IO
操做。Gulp
严格的插件指南确保插件如你指望的那样简洁高质得工做。API
,掌握 Gulp
绝不费力,构建工做尽在掌握:如同一系列流管道。gulp
和webpack
都是前端著名的构建工具,经过必定的配置,几乎能实现如出一辙的功能,可是gulp
在使用上与webpack
不一样的点是,gulp
要实现什么功能是以写脚本的方式自定义,而webpack
以配置文件的方式,我的以为经过gulp
提供的方式自定义工做流更容易实现,也更透明,本身写插件也能方便的理清楚插件何时被调用,须要接收和输出什么东西。因此即便你会了webpack
,学习gulp
也是很是有必要的。前端
安装node
npm i -g gulp-cli
npm i -D gulp
复制代码
编写gulpfile.js
,gulp
默认执行gulpfile.js
文件webpack
var gulp = require('gulp');
gulp.task('default', function (cb) {
console.log('task default')
cb()
})
复制代码
读取须要处理的文件,以便进行后续的处理。 第一个参数:匹配模式字符串或字符串数组。了解 Globs 第二个参数:可选,经过glob-stream
所传递给node-glob
的参数。 返回:Vinyl files 的 stream
。经过pipe(..)
将文件流向后续插件传输。git
经过pipe(..)
输入文件流,将文件写入硬盘,并输出全部数据,能继续向下游pipe
,因此文件流能够继续被处理并被写入到其余地方。若是写入文件夹不存在,就会建立它。 第一个参数:文件被写入的路径 第二个参数:option.mode
默认0777
八进制权限字符串,定义输出目录中建立的目录的权限; option.cwd
输出目录的 cwd
参数,只在所给的输出目录是相对路径时候有效。github
gulp.src('src/*.js') // 读取src文件夹下的全部.jpg文件
.pipe(imagemin()) // 将全部文件用imagemin处理
.pipe(gulp.dest('dist')) // 将处理到这一步的文件写入dist文件夹
.pipe(minify()) // 将文件流用minify处理
.pipe(gulp.dest('code')) // 将处理后的文件写入code文件夹
复制代码
定义一个任务 第一个参数:任务的名字,若是你定义的任务须要在命令行中启动,那就不要使用空格。 第二个参数:Array
,当前任务依赖的任务列表,依赖任务在当前任务运行以前完成。(gulp4
已经去除) 第三个参数:fn
,函数中定义任务须要执行的一些操做。web
第三个参数fn
能够接受一个参数,该参数接收一个callback
,在函数中调用callback
能够标识该任务是否执行完成。 返回一个stream
或者promise
,也有相似的做用。 gulp
中实现任务依赖(任务并行或串行)的方法npm
gulp.task('one', function (cb) {
setTimeout(() => {
console.log(1)
cb()
}, 1000)
})
gulp.task('two', function (cb) {
console.log(2)
cb()
})
// 老版本序列化任务的方式
gulp.task('default', ['one'], function(cb){
console.log('over')
cb()
})
// gulp4实现串行任务的方式
gulp.task('default', gulp.series('one', 'two', function(cb){
console.log('over')
cb()
}))
// gulp4实现并行任务的方式
gulp.task('default', gulp.parallel('one', 'two', function(cb){
console.log('over')
cb()
}))
复制代码
监控文件的变化,执行相应的任务 第一个参数:要监视的glob
(也能够理解成文件或文件夹)。 第二个参数:options 第三个参数:要执行的具体任务内容gulp
gulp.watch('img', gulp.series('string'))
复制代码
从gulp的用时方法不难看出,gulp插件接收stream
,处理后返回stream
,可是在插件中可能使用到其余工具,其中处理文件的数据类型多是Buffer
,因此咱们常常在写插件时用到throungh
,他是一个能够Buffer
和stream
相互装换的工具,下面是一个压缩图片的插件例子。 images
库是一个能处理图片的nodejs
库,可是他的提供的api
处理单张图片,将他封装成gulp
插件,将他赋予批量处理图片的能力,而且能和其余处理工具一块儿使用,方便的实现一个工做流,好比将一个文件夹中的图片压缩后,在将其打包成一个压缩包。小程序
var through = require('through2'); // Buffer和stream装换库
const images = require('images'); // 图片处理库
// 插件级别的函数(处理文件
function gulpPrefixer(options) {
const {
size
} = options
var stream = through.obj(function(file, enc, cb) {
if (file.isBuffer()) {
file.contents = images(file.contents)
.size(size)
.encode('png')
}
// 确保文件进入下一个 gulp 插件
this.push(file);
// 告诉 stream 引擎,咱们已经处理完了这个文件
cb();
});
// 返回文件 stream
return stream;
};
// 导出插件主函数
module.exports = gulpPrefixer;
复制代码
做者简介:叶茂,芦苇科技web前端开发工程师,表明做品:口红挑战网红小游戏、芦苇科技官网。擅长网站建设、公众号开发、微信小程序开发、小游戏、公众号开发,专一于前端框架、服务端渲染、SEO技术、交互设计、图像绘制、数据分析等研究。微信小程序
欢迎和咱们一块儿并肩做战: web@talkmoney.cn 访问 www.talkmoney.cn 了解更多