-
-
Save 1e4/4569dbec6d1c9871c813 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var gulp = require('gulp'); | |
var runSequence = require('run-sequence'); | |
var minifyCss = require('gulp-minify-css'); | |
var buildDir = './build/'; | |
var minifyCssSettings = { advanced: true, aggressiveMerging: true }; | |
// Main build | |
gulp.task('build', function() { | |
runSequence( | |
'clean', | |
['move-js', 'move-php', 'move-images', 'compile-stylus'], | |
'clone-prism', | |
['minify-css', 'minify-js'], | |
'replace-build-ids', | |
'create-backup-zip', | |
'move-to-wordpress' | |
); | |
}); | |
// Just a quick build for fast development | |
gulp.task('build-quick', function() { | |
runSequence(['move-js', 'move-php', 'move-images', 'compile-stylus']); | |
}); | |
// Wipes out the build dir | |
gulp.task('clean', function() { | |
return gulp.src(buildDir, { read: false }).pipe(require('gulp-clean')()); | |
}); | |
// Validate JS | |
gulp.task('validate-js', function() { | |
return gulp.src('./js/**.js').pipe(require('gulp-jshint')()); | |
}); | |
// Move files to build dir before minifying them | |
[['js', 'js'], ['php', ''], ['images', 'images']].forEach(function(item) { | |
gulp.task('move-' + item[0], function() { | |
return gulp.src('./' + item[0] + '/**').pipe(gulp.dest(buildDir + item[1])); | |
}); | |
}); | |
// Minify JS and create sourcemaps | |
gulp.task('minify-js', function() { | |
return gulp.src(buildDir + '/js/**.js').pipe(require('gulp-uglify')()).pipe(gulp.dest(buildDir + 'js')); | |
}); | |
// Minify CSS and create sourcemaps | |
gulp.task('minify-css', function() { | |
var sourcemaps = require('gulp-sourcemaps'); | |
gulp.src(buildDir + '**.css') | |
.pipe(sourcemaps.init()) | |
.pipe(minifyCss(minifyCssSettings)) | |
.pipe(sourcemaps.write('./maps')) | |
.pipe(gulp.dest(buildDir)); | |
}); | |
// Compiles stylus but doesn't minify or cleanup | |
gulp.task('compile-stylus', function() { | |
var sourcemaps = require('gulp-sourcemaps'); | |
return gulp.src('./stylus/**.styl') | |
.pipe(sourcemaps.init()) | |
.pipe(require('gulp-stylus')({ compress: false })) | |
.pipe(gulp.dest(buildDir)); | |
}); | |
// Minify HTML | |
gulp.task('minify-html', function() { | |
return gulp.src('./php/**').pipe(require('gulp-htmlmin')({ collapseWhitespace: true })).pipe(gulp.dest(buildDir)); | |
}); | |
// Minify Images | |
gulp.task('minify-images', function() { | |
return gulp.src('./images/**').pipe(require('gulp-imagemin')({ progressive: true, use: [require('imagemin-pngquant')()] })).pipe(gulp.dest(buildDir + '/images')); | |
}); | |
// Clones down the Prism repo | |
gulp.task('clone-prism', function() { | |
return require('gulp-git').clone('https://github.com/LeaVerou/prism.git', { cwd: buildDir + 'js/lib' }, function() { | |
return runSequence(['move-prism-css', 'move-prism-js'], 'remove-prism'); | |
}); | |
}); | |
// Move the Prism CSS file out of its burried place | |
gulp.task('move-prism-css', function() { | |
return gulp.src(buildDir + '/js/lib/prism/themes/prism.css').pipe(minifyCss(minifyCssSettings)).pipe(gulp.dest(buildDir + '/js/lib/')); | |
}); | |
// Concatenate and move the Prism JS files | |
gulp.task('move-prism-js', function() { | |
var base = buildDir + '/js/lib/prism/components/'; | |
var files = []; | |
['core', 'clike', 'apacheconf', 'bash', 'css', 'css-extras', 'javascript', 'markup', 'php', 'php-extras', 'python', 'sass', 'scss', 'stylus', 'sql'].forEach(function(item) { | |
files.push(base + 'prism-' + item + '.min.js'); | |
}); | |
return gulp.src(files, { base: '.' }).pipe(require('gulp-concat')('prism.js')).pipe(gulp.dest(buildDir + '/js/lib/')); | |
}); | |
// Remove the stuff from prism we never wanted | |
gulp.task('remove-prism', function() { | |
return gulp.src(buildDir + '/js/lib/prism', { read: false }).pipe(require('gulp-clean')()); | |
}); | |
// Replace build IDs inside required PHP and JS files | |
gulp.task('replace-build-ids', function() { | |
return gulp.src([buildDir + '/**/*.php', buildDir + '/**/*.js']).pipe(require('gulp-replace')('@BUILD_ID@', build)).pipe(gulp.dest(buildDir)); | |
}); | |
// Create ZIP of this for backup | |
gulp.task('create-backup-zip', function() { | |
return gulp.src('./**').pipe(require('gulp-zip')('source.zip')).pipe(gulp.dest(buildDir)); | |
}); | |
// Move dist files to Wordpress-visible theme | |
gulp.task('move-to-wordpress', function() { | |
return gulp.src(buildDir + '/**').pipe(gulp.dest('../xx')); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment