原码目录:src
打包目录:build
文件目录:src/css
目标:src 中的 CSS 文件是未压缩的,打包至 build 目录后,生成 min.css 后缀的压缩文件
分析:
- 打包时,build目录中可能已经存在上一次打包生成的旧文件,所以每次打包都应该先清理掉。
- 打包时需要执行压缩操作
- 打包时需要执行文件更名操作,比如:app.css 压缩后的文件名应该为 app.min.css
- 打包后,每次修改 src 目录下的 CSS 文件,应该即时将修改部分重新打包
- 打包时的执行顺序为:清理 -> 打包 -> 监控修改,而且后一步必须在前一步操作完成后才可以执行。
第一步:设置变量
var config = {
src: "src",
dest: "build"
}
第二步:清理
涉及插件 [ gulp-clean ]
gulp-clean:清理文件及文件夹
/**
* 清理目标目录
*/
gulp.task('clean', function(cb) {
pump([
gulp.src(config.dist),
clean()
], cb)
})
第三步:执行文件操作
涉及插件 [ gulp-rename, gulp-clean-css, gulp-sourcemaps, gulp-postcss, autoprefixer, gulp-changed]
gulp-rename:更改文件名
gulp-clean-css:压缩CSS文件
gulp-sourcemaps:生成sourceMap
gulp-changed:只传递修改的文件,开发过程中,文件经常被修改,通过这个插件实现局部打包
gulp-postcss & autoprefixer:根据浏览器版本自动处理浏览器前缀
/**
* 执行CSS压缩
*/
gulp.task('minify:css', [], function(cb) {
pump([
// 获取原目录下所有的css文件
gulp.src(config.src + "/**/*.css"),
// 执行更名操作
rename({ suffix: '.min' }),
// 每次打包时,只打包内容发生改变的文件
changed(config.dist, { extension:'.css' }),
// 生成sourcemap,需要配合后面的sourcemaps.write()
sourcemaps.init(),
// 针对浏览器生成不同的CSS前缀
postcss([ autoprefixer({
browsers: ['last 2 versions'],
cascade: true
}) ]),
// 执行JS压缩
minifyCss({
keepSpecialComments: '*'
}),
// 生成sourcemap
sourcemaps.write('.'),
// 输出至目标目录
gulp.dest(config.dist)
], cb);
});
第四步:监控CSS文件,如果有变性则即刻重新打包
/**
* 监控
*/
gulp.task('watch', [], function(cb) {
gulp.watch(config.src + "/**/*.css", ['minify:css']);
});
第五步:安排执行顺序
涉及插件 [ run-sequence ]
run-sequence:同步执行任务
/**
* 开始执行
*/
gulp.task('default', function(cb) {
sequence('clean', 'minify:css', 'watch', cb);
});
完整版文档
var gulp = require('gulp'),
clean = require('gulp-clean'),
minifyCss = require('gulp-clean-css'),
rename = require('gulp-rename'),
changed = require('gulp-changed'),
postcss = require('gulp-postcss'),
autoprefixer = require('autoprefixer'),
sourcemaps = require('gulp-sourcemaps'),
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)
})
/**
* 执行CSS压缩
*/
gulp.task('minify:css', [], function(cb) {
pump([
// 获取原目录下所有的css文件
gulp.src(config.src + "/**/*.css"),
// 执行更名操作
rename({ suffix: '.min' }),
// 每次打包时,只打包内容发生改变的文件
changed(config.dist, { extension:'.css' }),
// 生成sourcemap,需要配合后面的sourcemaps.write()
sourcemaps.init(),
// 针对浏览器生成不同的CSS前缀
postcss([ autoprefixer({
browsers: ['last 2 versions'],
cascade: true
}) ]),
// 执行JS压缩
minifyCss({
keepSpecialComments: '*'
}),
// 生成sourcemap
sourcemaps.write('.'),
// 输出至目标目录
gulp.dest(config.dist)
], cb);
});
/**
* 监控
*/
gulp.task('watch', [], function(cb) {
gulp.watch(config.src + "/**/*.css", ['minify:css']);
});
/**
* 开始执行
*/
gulp.task('default', function(cb) {
sequence('clean', 'minify:css', 'watch', cb);
});
网友评论