gulp实战(3)

来源:互联网 发布:阿里云服务器打开端口 编辑:程序博客网 时间:2024/05/20 21:45

原码目录:src
打包目录:build

目标:src 中的 html 文件是未压缩的,打包至 build 目录后,生成压缩后的文件,名字与之前保持一致,html中的 js 及 css 需要同时被压缩

分析:
1. 打包时,build目录中可能已经存在上一次打包生成的旧文件,所以每次打包都应该先清理掉。
2. 打包时需要执行压缩操作
3. 打包后,每次修改 src 目录下的 html 文件,应该即时将修改部分重新打包
4. 打包时的执行顺序为:清理 -> 打包 -> 监控修改,而且后一步必须在前一步操作完成后才可以执行。

第一步:设置变量

var config = {    src: "src",    dest: "build"}

第二步:清理

涉及插件 [ gulp-clean ]

gulp-clean:清理文件及文件夹

/** * 清理目标目录 */gulp.task('clean', function(cb) {    pump([        gulp.src(config.dist),        clean()    ], cb)})

第三步:执行文件操作

涉及插件 [ gulp-htmlmin, gulp-changed]

gulp-htmlmin: 压缩HTML文件
gulp-changed: 只传递更改过的文件

/** * 执行html压缩 */gulp.task('minify:html', [], function(cb) {    pump([        // 获取原目录下所有的html文件        gulp.src(config.src + "/**/*.html"),        // 每次打包时,只打包内容发生改变的文件        changed(config.dist, { extension:'.html' }),        // 执行html压缩        htmlmin({            removeComments: true,               // 清除HTML注释            collapseWhitespace: true,           // 压缩空格            collapseBooleanAttributes: true,    // 省略布尔属性的值 <input checked="true"/> => <input checked>            removeEmptyAttributes: true,        // 删除所有空格作属性值 <input id=""> => <input>            removeScriptTypeAttributes: true,   // 删除<script>的type="text/javascript"            removeStyleLinkTypeAttributes: true,// 删除<style>和<link>的type="text/css"            minifyJS: true,                     // 压缩页面JS            minifyCSS: true                     // 压缩页面CSS        }),        // 输出至目标目录        gulp.dest(config.dist)    ], cb);});

第四步:监听文件变更

删除文件时似乎并不能被监听到

/** * 监听JS文件变改,即时调用任务执行JS增量打包 */gulp.task('watch', [], function(cb) {    gulp.watch(config.src + "/**/*.html", ['minify:html']);});

第五步:安排执行顺序

涉及插件 [ run-sequence ]

run-sequence:任务同步

/** * 开始执行 */gulp.task('default', function(cb) {    sequence('clean', 'minify:html', 'watch', cb);});

完整版文档

var gulp            = require('gulp'),    clean           = require('gulp-clean'),    changed         = require('gulp-changed'),    htmlmin         = require('gulp-htmlmin'),    pump            = require('pump'),    sequence        = require('run-sequence');var config = {    src: "src",    dist: "build"}/** * 清理目标目录 */gulp.task('clean', function(cb) {    pump([        gulp.src(config.dist),        clean()    ], cb)})/** * 执行html压缩 */gulp.task('minify:html', [], function(cb) {    pump([        // 获取原目录下所有的html文件        gulp.src(config.src + "/**/*.html"),        // 每次打包时,只打包内容发生改变的文件        changed(config.dist, { extension:'.html' }),        // 执行html压缩        htmlmin({            removeComments: true,               // 清除HTML注释            collapseWhitespace: true,           // 压缩空格            collapseBooleanAttributes: true,    // 省略布尔属性的值 <input checked="true"/> => <input checked>            removeEmptyAttributes: true,        // 删除所有空格作属性值 <input id=""> => <input>            removeScriptTypeAttributes: true,   // 删除<script>的type="text/javascript"            removeStyleLinkTypeAttributes: true,// 删除<style>和<link>的type="text/css"            minifyJS: true,                     // 压缩页面JS            minifyCSS: true                     // 压缩页面CSS        }),        // 输出至目标目录        gulp.dest(config.dist)    ], cb);});/** * 监控 */gulp.task('watch', [], function(cb) {    gulp.watch(config.src + "/**/*.html", ['minify:html']);});/** * 开始执行 */gulp.task('default', function(cb) {    sequence('clean', 'minify:html', 'watch', cb);});