gulp实战(2) - 自动化打包CSS文件(完整版)

原码目录:src
打包目录:build
文件目录:src/css

目标:src 中的 CSS 文件是未压缩的,打包至 build 目录后,生成 min.css 后缀的压缩文件

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

第一步:设置变量

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);
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值