Gulp:基于流的构建系统
安装
1 | # 安装gulp命令行工具 |
使用
在根目录下,创建gulpfile.js
基本使用
通过导出函数成员的方式定义任务。
gulp中的任务是异步任务,需要使用回调函数标记执行结束
gulpfile.js是gulp的执行文件,在gulpfile.js中添加构建指令。
1 | //导出默认任务 |
执行gulp,会自动运行gulpfile.js中的default任务

运行gulp test会执行test任务

注意:对于异步执行函数,任务完成标记需要在回调函数中执行
1 | exports.task = (done)=>{ |
组合任务
通过
series和parallel实现组合任务
series组合任务串行执行,用于组合一些有依赖关系,需要顺序执行的任务
parallel组合任务并行执行,用于组合一些没有依赖关系,可以同时执行的任务
1 | const {series, parallel} = require('gulp') |
执行gulp seriesTask,任务串行执行

执行gulp parallelTask,任务并行执行

错误处理
因为gulp任务回调函数式错误优先,所有处理任务执行错误,仅需在done回调函数中传入错误信息即可。
1 | const {series, parallel} = require('gulp') |
执行callback_error,报错

执行组合函数,遇到错误任务时,会停止执行后续任务

流的方式使用gulp
使用文件流实现文件复制
1 | const fs = require('fs') |

gulp构建过程核心工作原理
读取文件,加工文件,写入另外一个位置
例子,实现css的压缩
使用fs模块读取和写入文件流。
使用steram的Transform实现文件内部的修改
1 | const fs = require('fs') |
normalize.css
1 | /* 这是body注释 */ |
执行gulp
转换后的 normalize.min.css
1 | body{background-color:#cccccc;} |
文件操作API
使用gulp的src 模块实现文件流读取,dest实现文件流写入
1 | const { src, dest } = require('gulp') |
常用插件
gulp-clean-css压缩css文件1
2
3
4
5
6
7
8const { src, dest } = require('gulp')
const cleanCss = require('gulp-clean-css')
exports.default = ()=>{
return src('src/normalize.css')
.pipe(cleanCss()) // 先进行转换
.pipe(dest('dist'))
}gulp-rename重命名文件1
2
3
4
5
6
7
8
9
10const { src, dest } = require('gulp')
const cleanCss = require('gulp-clean-css')
const rename = require('gulp-rename')
exports.default = ()=>{
return src('src/normalize.css')
.pipe(cleanCss()) // 先进行转换
.pipe(rename({extname:".min.css",}))
.pipe(dest('dist'))
}gulp-sass
用于构建scss文件为css`文件gulp-sass会默认认为
_开头的scss文件为依赖样式,不会导出css文件1
2
3
4
5
6
7const { src, dest } = require('gulp')
const sass = require('gulp-sass')
exports.default = ()=>{
return src('src/assets/scss/*.scss',{base:'src'})
.pipe(sass()) // 进行转换
.pipe(dest('dist'))
}gulp-babel用于构建脚本文件,实现es6的向下转换使用
gulp-babel不会自动安装babel/core核心模块,还需要手动安装@babel/core以及@babel/preset-env。@babel/preset-env会默认将ES6的所有新特性进行转换1
2
3
4
5
6
7
8
9const { src, dest } = require('gulp')
const babel = require('gulp-babel')
//实现脚本文件编译
exports.default = () =>{
return src('src/assets/scripts/*.js', { base: "src/" })
.pipe(babel({presets:['@babel/preset-env']}))//指定转换preset
.pipe(dest('dist'))
}gulp-imagemin用于图片压缩gulp-imagemin是图片无损压缩,只是删除了图片的一些附属信息。1
2
3
4
5
6
7const { src, dest } = require('gulp')
const imagemin = require('gulp-imagemin')
exports.default = ()=>{
return src('src/assets/images/*', { base: "src/" })
.pipe(imagemin())//压缩图片
.pipe(dest('dist'))
}
gulp-load-plugins用于管理plugin,能够自动加载所有的plugin1
yarn add gulp-load-plugins --dev
1
2
3
4
5
6
7
8
9const loadPlugins = require('gulp-load-plugins')
const plugins = loadPlugins()
//通过`plugin.`的方式调用模块
const { src, dest, parallel,series} = require('gulp')
exports.default = ()=>{
return src('src/assets/images/*', { base: "src/" })
.pipe(plugins.imagemin())//通过`plugin.imagemin`的方式调用图片压缩模块
.pipe(dest('dist'))
}
其他模块
del模块可以实现文件夹清空1
yarn add del --dev
1
2
3
4
5
6
7
8
9const del = require('del')
const clean = ()=>{
return del(['dist'])
}
module.exports={
clean
}browser-sync服务器,模块提供开发服务器,实现热更新