gulp 特点:任务化、基于流,I/O
gulp 内存:
输入流: 本地文件 -> gulp 内存
输出流: gulp 内存 -> 本地
常用插件:
{
"gulp-clean-css": "压缩css",
"gulp-concat": "拼接css/js",
"gulp-connect": "服务",
"gulp-htmlmin": "压缩html",
"gulp-less": "less转css",
"gulp-livereload": "实时更新",
"gulp-load-plugins": "插件管理",
"gulp-rename": "重命名",
"gulp-uglify": "压缩js"
}
// series 同步执行 parallel 异步
const { series, parallel, src, dest, watch } = require("gulp");
const $ = require("gulp-load-plugins")();
const fs = require("fs");
// $.livereload 会和$.connect.reload() 冲突 二者用一个就好
function clean(cb) {
fs.readdir("dist", async (err, files) => {
if (err) {
cb();
} else {
return src("dist", { read: false }).pipe($.clean()).unpipe();
}
});
}
function css() {
return (
src("src/less/**/*.less")
.pipe($.less())
.pipe($.concat("main.css"))
.pipe(dest("dist/css"))
.pipe($.cleanCss()) // 压缩
.pipe($.rename({ suffix: ".min" }))
.pipe(dest("dist/css"))
// .pipe($.livereload());
.pipe($.connect.reload())
);
}
function javascript() {
return (
src("src/js/**/*.js") //操作的源文件
.pipe($.concat("main.js")) //合并到临时文件
.pipe(dest("dist/js")) //生成到目标文件夹
.pipe($.uglify()) // 压缩
.pipe($.rename({ suffix: ".min" }))
.pipe(dest("dist/js"))
// .pipe($.livereload());
.pipe($.connect.reload())
);
}
function html() {
return (
src("index.html")
.pipe($.htmlmin({ collapseWhitespace: true }))
.pipe(dest("dist/"))
// .pipe($.livereload());
.pipe($.connect.reload())
);
}
// 监视文件变化,重新构建
function watchChange() {
// $.livereload.listen();
watch(["src/js/**/*.js"], { events: ["change"] }, javascript);
watch(["src/less/**/*.less"], { events: ["change"] }, css);
watch(["index.html"], { events: ["change"] }, html);
}
function serve() {
return new Promise((resolve, reject) => {
$.connect.server({
root: "dist/",
livereload: true,
port: 8888,
});
watchChange();
resolve();
});
}
exports.clean = series(clean);
exports.html = series(html);
exports.watch = series(watchChange);
exports.default = series(parallel(css, javascript), html, serve);