Gulp配置实战

1.由于华强项目维护人员变化多次,导致项目文件参差不起,每次新增需求时都需要新写gulp.task(…),因此,借机整理了一次,放此已备用。

2.需具备一定node gulp js基础。

var gulp = require('gulp'),
    sass = require('gulp-sass'),
    autoprefixer = require('gulp-autoprefixer'),
    minifycss = require('gulp-minify-css'),
    jshint = require('gulp-jshint'),
    uglify = require('gulp-uglify'),
    imagemin = require('gulp-imagemin'),
    rename = require('gulp-rename'),
    clean = require('gulp-clean'),
    concat = require('gulp-concat'),
    notify = require('gulp-notify'),
    cache = require('gulp-cache'),
    minifyHTML = require("gulp-minify-html"),
    sourcemaps = require('gulp-sourcemaps');

var SRC_DIR = './src/',
    DST_DIR = './dist/',
    JS = {
        jquery: SRC_DIR + 'res/js/global/jquery-1.8.3.min.js',
        jqcommon: SRC_DIR + 'res/js/global/jquery.common.js',
        ajax: SRC_DIR + 'res/js/global/jquery.ajaxRequest.js',
        common: SRC_DIR + 'res/js/global/common.js',
        global: SRC_DIR + 'res/js/global/global.js',
        popbox: SRC_DIR + 'res/js/global/jquery.popbox.js',
        head: SRC_DIR + 'res/js/global/head.js',
        login: SRC_DIR + 'res/js/global/login.js',
    },
    JS_ALL = [JS.jquery, JS.jqcommon, JS.ajax, JS.common, JS.global, JS.popbox, JS.head, JS.login];

/**
 * 清空目标文件夹
 */
gulp.task("clean", function() {
    return gulp.src(DST_DIR)
        .pipe(clean());
});

/**
 * 编译全部
 */
gulp.task('default', ['auto-img', 'auto-html', 'auto-css', 'auto-js']);

/**
 * 编译全部images
 */
gulp.task('auto-img', function() {
    return gulp.src(SRC_DIR + '**/*.{png,jpg,gif,ico}')
        .pipe( /*cache(*/ imagemin({ //慎用,不同文件夹内的相同图片(即使文件名不同)也会被缓存
            optimizationLevel: 5, // 优化等级0-7
            progressive: true, // 无损压缩jpg图片
            interlaced: true, // 隔行扫描gif进行渲染
        }) /*)*/ )
        .pipe(gulp.dest(DST_DIR))
});

/**
 * 编译全部html shtml
 */
gulp.task('auto-html', function() {
    return gulp.src(SRC_DIR + '**/*.+(html|shtml)')
        .pipe(gulp.dest(DST_DIR));
});

/**
 * 编译全部scss
 */
gulp.task('auto-css', function() {
    return gulp.src(SRC_DIR + 'res/scss/**/*.scss', {
            base: SRC_DIR + 'res/scss/'
        })
        .pipe(sourcemaps.init())
        .pipe(sass({
            style: 'expanded'
        }))
        .pipe(autoprefixer({
            browsers: ['> 1%'],
            cascade: false
        }))
        .pipe(gulp.dest(DST_DIR + 'res/css/'))
        .pipe(rename({
            suffix: '.min'
        }))
        .pipe(minifycss({
            compatibility: 'ie8'
        }))
        .pipe(sourcemaps.write('../../maps/')) // dist/maps/文件夹
        .pipe(gulp.dest(DST_DIR + 'res/css/'))
});

/**
 * 编译全部javascript
 */
gulp.task('auto-js', ['auto-mainjs'], function() {
    return gulp.src([SRC_DIR + '**/*.js', '!' + SRC_DIR + 'res/js/global/*.js'], {
            base: SRC_DIR + 'res/js/'
        })
        .pipe(sourcemaps.init())
        .pipe(jshint())
        .pipe(jshint.reporter('default'))
        .pipe(gulp.dest(DST_DIR + 'res/js/'))
        .pipe(rename({
            suffix: '.min'
        }))
        .pipe(uglify({
            output: {
                ascii_only: true,
            }
        }))
        .pipe(sourcemaps.write('../../maps/')) // dist/maps/文件夹
        .pipe(gulp.dest(DST_DIR + 'res/js/'))
});

/**
 * 编译公共javascript
 */
gulp.task('auto-mainjs', function() {
    return gulp.src(JS_ALL)
        .pipe(sourcemaps.init())
        .pipe(jshint())
        .pipe(jshint.reporter('default'))
        .pipe(concat('main.js'))
        .pipe(gulp.dest(DST_DIR + 'res/js/global'))
        .pipe(rename({
            suffix: '.min'
        }))
        .pipe(uglify({
            output: {
                ascii_only: true
            }
        }))
        .pipe(sourcemaps.write('../../../maps/global')) // dist/maps/global
        .pipe(gulp.dest(DST_DIR + 'res/js/global'))
});

/**
 * 单独页面编译
 * folder:文件夹名称
 */
function imgTask(folder) {
    return gulp.task('img-' + folder, function() {
        gulp.src(SRC_DIR + 'res/img/' + folder + '/**/*.{png,jpg,gif,ico}', {
                base: SRC_DIR
            })
            .pipe(imagemin({
                optimizationLevel: 5,
                progressive: true,
                interlaced: true,
            }))
            .pipe(gulp.dest(DST_DIR))
    });
}

function htmlTask(folder) {
    return gulp.task('html-' + folder, function() {
        var htmlAddress;
        if (folder == 'index') {
            htmlAddress = SRC_DIR + '*.{shtml,html}';
        } else {
            htmlAddress = SRC_DIR + folder + '/**/*.{shtml,html}';
        }
        gulp.src(htmlAddress, {
                base: SRC_DIR
            })
            .pipe(gulp.dest(DST_DIR))
    })
}

function cssTask(folder) {
    return gulp.task('css-' + folder, function() {
        gulp.src(SRC_DIR + 'res/scss/' + folder + '/*.scss', {
                base: SRC_DIR + 'res/scss/'
            })
            .pipe(sourcemaps.init())
            .pipe(sass({
                style: 'expanded'
            }))
            .pipe(autoprefixer({
                browsers: ['> 1%'],
                cascade: false
            }))
            .pipe(gulp.dest(DST_DIR + 'res/css/'))
            .pipe(rename({
                suffix: '.min'
            }))
            .pipe(minifycss({
                compatibility: 'ie8'
            }))
            .pipe(sourcemaps.write('../../maps/')) // dist/maps/文件夹
            .pipe(gulp.dest(DST_DIR + 'res/css/'))
    })
}

function jsTask(folder, deps) {
    if (!deps) {
        deps = []
    }
    deps.push(SRC_DIR + 'res/js/' + folder + '/*.js');
    return gulp.task('js-' + folder, function() {
        gulp.src(deps)
            .pipe(sourcemaps.init())
            .pipe(jshint())
            .pipe(jshint.reporter('default'))
            .pipe(concat(folder + 'all.js'))
            .pipe(gulp.dest(DST_DIR + 'res/js/' + folder + '/'))
            .pipe(rename({
                suffix: '.min'
            }))
            .pipe(uglify({
                output: {
                    ascii_only: true,
                }
            }))
            .pipe(sourcemaps.write('../../../maps/' + folder + '/')) // dist/maps/文件夹
            .pipe(gulp.dest(DST_DIR + 'res/js/' + folder + '/'))
    })
}

/**
 * 单独页面监视
 * folder:文件夹名称
 */
function watchTask(folder) {
    return gulp.task('watch-' + folder, function() {
        var htmlAddress;
        if (folder == 'index') {
            htmlAddress = SRC_DIR + '*.{shtml,html}';
        } else {
            htmlAddress = SRC_DIR + folder + '/**/*.{shtml,html}';
        }
        gulp.watch(htmlAddress, ['html-' + folder]);
        gulp.watch(SRC_DIR + 'res/scss/' + folder + '/*.scss', ['css-' + folder]);
        gulp.watch(SRC_DIR + 'res/js/' + folder + '/*.js', ['js-' + folder]);
    })
}

/*
 *[JS.jquery, JS.jqcommon, JS.ajax, JS.common, JS.global, JS.popbox, JS.head, JS.login]
 */
htmlTask('index');
htmlTask('BOM');
cssTask('BOM');
jsTask('index', [JS.jquery, JS.popbox]);
jsTask('BOM', [JS.jquery, JS.popbox, JS.jqcommon]);
watchTask('BOM');

OVER

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值