1. 什么是gulp
- gulp是可以自动执行任务的工具,在平时开放流程里面,有一些任务需要手工重复执行的,比如:
- 把文件从开发目录拷贝到生产目录
- 把多个 JS 或者 CSS 文件合并成一个文件
- 对JS文件和CSS进行压缩
- 把sass或者less文件编译成CSS
- 压缩图像文件
- 创建一个可以实时刷新页面内容的本地服务器
2. 安装gulp
npm install --g gulp-cli
npm install --save-dev gulp
3. gulp核心Api
- series():按顺序执行多个任务一个一个执行
- parallel():并行执行任务或者任务组
- src():读取数据源文件转换成stream流
- dest:输出数据流到目标路径
- pipe():管道-可以在中间对数据流进行处理
- on:事件监听
- watch:数据源监听
这里只是部分常用api 想看全部的请到gulp中文官网 www.gulpjs.com.cn/docs/api/co…
4. gulp实战
- 安装
- 编译样式文件
- 编译脚本文件
- 编译html文件
- 编译任务
- 压缩图片
- 拷贝静态文件
- 删除输出目录
- 开发服务器
- 监听文件变化
- 合并和压缩
1.安装
cnpm install gulp gulp-less --save
2.编译less 文件
const gulp = require('gulp');
const less = require('gulp-less');
gulp.task('less', function () {
return gulp.src('src/styles/*.less')
.pipe(less())
.pipe(gulp.dest('dist/styles'));
});
gulp.task('default', gulp.series('less'));

编译脚本
npm install gulp gulp-babel @babel/core @babel/preset-env --save-dev
const gulp = require('gulp')
const babel = require('gulp-babel')
gulp.task('scripts', function () {
return gulp.src('./src/scripts/*.js')
.pipe(babel(
{
presets: ['@babel/env']
}
))
.pipe(gulp.dest('dist/scripts'))
})
gulp.task('default', gulp.series('scripts'));

编译html
npm install gulp gulp-htmlmin --save-dev
###
const gulp = require('gulp')
const htmlmin = require('gulp-htmlmin')
gulp.task('html', function () {
return gulp.src('src/*.html')
.pipe(htmlmin({ collapseWhitespace: true }))
.pipe(gulp.dest('dist'))
})
压缩图片
npm install gulp gulp-imagemin imagemin-pngquant imagemin-jpegtran imagemin-gifsicle imagemin-svgo --save-dev
const gulp = require('gulp');
const imagemin = require('gulp-imagemin');
const pngquant = require('imagemin-pngquant');
const jpegtran = require('imagemin-jpegtran');
const gifsicle = require('imagemin-gifsicle');
const svgo = require('imagemin-svgo');
gulp.task('images', function () {
return gulp.src('src/images/*.{jpg,png,gif,svg}')
.pipe(imagemin([
pngquant(),
jpegtran(),
gifsicle(),
svgo()
]))
.pipe(gulp.dest('dist/images'));
});
gulp.task('default', gulp.series('images'));
拷贝静态文件
const gulp = require('gulp');
gulp.task('copy', function () {
return gulp.src('src/static/**/*')
.pipe(gulp.dest('dist/static'));
});
gulp.task('default', gulp.series('copy'));
删除输出目录
npm install gulp-clean --save-dev
const gulp = require('gulp');
const gulpClean = require('gulp-clean');
gulp.task('clean', function () {
return gulp.src("dist/**", { read: false })
.pipe(gulpClean())
});
gulp.task('default', gulp.series('clean'));
自动加载插件
- gulp 插件太多了怎么办,你就可以使用gulp 的自动加载插件 这样你就可以不用一个个去引用了
npm install gulp-load-plugins --save-dev
const gulp = require('gulp');
const plugins = require('gulp-load-plugins')();
gulp.task('clean', function () {
return gulp.src("dist/**", { read: false })
.pipe(plugins.clean())
});
gulp.task('html', function () {
return gulp.src('src/*.html')
.pipe(plugins.htmlmin({ collapseWhitespace: true }))
.pipe(gulp.dest('dist'))
})
gulp.task('default', gulp.series('clean', 'html'));
开发服务器
cnpm i browser-sync -D
const gulp = require('gulp');
const plugins = require('gulp-load-plugins')();
const browserSync = require('browser-sync')
gulp.task('clean', function () {
return gulp.src("dist/**", { read: false })
.pipe(plugins.clean())
});
gulp.task('html', function () {
return gulp.src('src/*.html')
.pipe(plugins.htmlmin({ collapseWhitespace: true }))
.pipe(gulp.dest('dist'))
})
gulp.task('serve', function () {
return browserSync.create().init({
notify: false,
server: {
baseDir: 'dist',
livereload: true
}
})
})
gulp.task('default', gulp.series('clean', 'html', 'serve'));
监听文件变化
const gulp = require('gulp');
const plugins = require('gulp-load-plugins')();
const browserSync = require('browser-sync')
gulp.task('clean', function () {
return gulp.src("dist/**", { read: false })
.pipe(plugins.clean())
});
const html = () => {
return gulp.src('src/*.html')
.pipe(plugins.htmlmin({ collapseWhitespace: true }))
.pipe(gulp.dest('dist'))
}
gulp.task('html', function () {
return gulp.src('src/*.html')
.pipe(plugins.htmlmin({ collapseWhitespace: true }))
.pipe(gulp.dest('dist'))
})
gulp.task('serve', function () {
gulp.watch("src/*.html", html);
return browserSync.create().init({
notify: false,
server: {
baseDir: 'dist',
livereload: true
}
})
})
gulp.task('default', gulp.series('clean', html, 'serve'));
合并和压缩
const { src, dest, parallel, series, watch } = require('gulp');
const plugins = require('gulp-load-plugins')();
const browserSync = require('browser-sync');
const path = require('path');
const browserServer = browserSync.create();
const styles = () => {
return src("src/styles/*.less", { base: 'src' })
.pipe(plugins.less())
.pipe(dest('temp'))
}
const scripts = () => {
return src("src/scripts/*.js", { base: 'src' })
.pipe(plugins.babel({
presets: ["@babel/preset-env"]
}))
.pipe(dest('temp'))
}
const html = () => {
return src("src/*.html", { base: 'src' })
.pipe(plugins.ejs({ title: 'gulp' }, { cache: false }))
.pipe(dest('temp'))
}
const images = async () => {
let imagemin = await import('gulpimagemin');
return src("src/assets/images/**/*.@(jpg|png|gif|svg)", { base: 'src' })
.pipe(imagemin.default())
.pipe(dest('dist'))
}
const static = async () => {
return src("static/**", { base: 'static' })
.pipe(dest('dist'))
}
const clean = () => {
return src(["dist/**", "temp/**"], { read: false })
.pipe(plugins.clean({ allowEmpty: true }));
}
const serve = () => {
watch("src/styles/*.less", styles);
watch("src/scripts/*.js", scripts);
watch("src/*.html", html);
watch([
"src/assets/images/**/*.@(jpg|png|gif|svg)",
"static/**"
], browserServer.reload);
return browserServer.init({
notify: false,
files: ['dist/**'],
server: {
baseDir: ['temp', 'src', 'static'],
routes: {
'/node_modules': path.resolve('node_modules')
}
}
});
}
const concat = () => {
return src('temp/*.html', { base: 'temp' })
.pipe(plugins.useref({
searchPath: ['temp', '.']
}))
.pipe(plugins.if('*.html', plugins.htmlmin({
collapseWhitespace: true,
minifyCSS: true,
minifyJS: true
})))
.pipe(plugins.if('*.js', plugins.uglify()))
.pipe(plugins.if('*.css', plugins.cleanCss()))
.pipe(dest('dist'));
}
const compile = parallel(styles, scripts, html);
const build = series(clean, parallel(series(compile, concat), images, static));
const dev = series(clean, compile, serve);
module.exports = {
clean,
build,
dev
}