Skip to content

Instantly share code, notes, and snippets.

@mcattx
Created December 9, 2015 10:10
Show Gist options
  • Select an option

  • Save mcattx/05dbdb77d2de5c90f16f to your computer and use it in GitHub Desktop.

Select an option

Save mcattx/05dbdb77d2de5c90f16f to your computer and use it in GitHub Desktop.
My personal gulp config
/**
* 前端资源构建
*
*/
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var minify = require('gulp-minify-css');
var sass = require('gulp-sass');
var livereload = require('gulp-livereload');
var imagemin = require('gulp-imagemin');
var pngquant = require('imagemin-pngquant');
var plumber = require('gulp-plumber');
var rename = require('gulp-rename');
var cssbeautify = require('gulp-cssbeautify');
var rev = require('gulp-rev');
var through = require('through2');
var rimraf = require('rimraf');
var path = require('path');
var revCollector = require('gulp-rev-collector');
var revOutdated = require('gulp-rev-outdated');
var schedule = require('node-schedule');
/** sass编译 */
gulp.task('sass', function(){
gulp.src('./sass/**/*.scss')
.pipe(plumber())
.pipe(sass().on('error', sass.logError))
.pipe(cssbeautify())
.pipe(gulp.dest('./css'))
});
/** 压缩图片 */
gulp.task('minifyImage', function(){
gulp.src(['./images/*'])
.pipe(plumber())
.pipe(imagemin({
progressive: true,
svgoPlugins: [{removeViewBox: false}],
use: [pngquant()]
}))
.pipe(gulp.dest('./release/images'))
});
/** 自动刷新页面 */
gulp.task('livereload', function(){
livereload.listen();
gulp.watch('./sass/**/*.scss', ['sass']);
gulp.watch(['./html/**/*.html', './sass/**/*.scss', './js/**/*.js']).on('change', livereload.changed);
});
/** css加版本号防止缓存 */
gulp.task('cssVersion', function(){
gulp.src('./css/**/*.css')
.pipe(plumber())
.pipe(rev())
.pipe(minify())
.pipe(gulp.dest('./release/css'))
.pipe(rev.manifest())
.pipe(gulp.dest('./release/rev/css'))
});
/** js加版本号防止缓存 */
gulp.task('jsVersion', function(){
gulp.src('./js/**/*.js')
.pipe(plumber())
.pipe(rev())
.pipe(uglify())
.pipe(gulp.dest('./release/js'))
.pipe(rev.manifest())
.pipe(gulp.dest('./release/rev/js'))
});
/** 同步html里加上版本号的静态资源 */
gulp.task('syncVersion', ['cssVersion', 'jsVersion', 'minifyImage'], function(){
gulp.src(['./release/rev/**/*.json', './html/**/*.html'])
.pipe(revCollector({
replaceReved: true,
dirReplacements: {
'/': './release'
}
}))
.pipe(gulp.dest('./release/html'))
});
function cleaner() {
return through.obj(function(file, enc, cb){
rimraf( path.resolve( (file.cwd || process.cwd()), file.path), function (err) {
if (err) {
this.emit('error', new gutil.PluginError('Cleanup old files', err));
}
this.push(file);
cb();
}.bind(this));
});
};
gulp.task('clean', function(){
gulp.src(['release/**/*.*'], {read: false})
.pipe(revOutdated(1))
.pipe(cleaner());
return;
});
/** 定时任务 */
//@todo
/** 开发环境 */
gulp.task('dev', ['sass', 'livereload']);
/** 生产环境 */
gulp.task('build', ['syncVersion']);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment