Created
October 13, 2015 14:45
-
-
Save darkwing/b1800cadb6f5559a23ed to your computer and use it in GitHub Desktop.
"punky" theme build file for David Walsh Blog
This file contains 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
'use strict'; | |
/* | |
Ways to improve site speed for theme: | |
=========================================== | |
- Store fonts.css in localStorage, don't make request if it's there | |
- Create a custom FontAwesome lib, lazyload | |
*/ | |
var gulp = require('gulp'); | |
var runSequence = require('run-sequence'); | |
var minifyCss = require('gulp-minify-css'); | |
var buildDir = './build/'; | |
var build = new Date().getTime(); | |
var minifyCssSettings = { advanced: true, aggressiveMerging: true }; | |
// Main build | |
gulp.task('build', function() { | |
return runSequence( | |
['clean'], | |
['move-js', 'move-php', 'move-images', 'compile-stylus'], | |
['clone-history'], | |
['clone-prism'], | |
['move-prism-css', 'move-prism-js', 'move-example-files'], | |
['remove-prism'], | |
['minify-css', 'minify-js', 'minify-php'], | |
['concat-prism-css'], | |
['concat-all-css'], | |
['replace-build-ids'], | |
['create-backup-zip'], | |
['move-to-wordpress'] | |
); | |
}); | |
// 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')({ | |
compress: { drop_console: true } | |
})).pipe(gulp.dest(buildDir + 'js')); | |
}); | |
// Minify CSS and create sourcemaps | |
gulp.task('minify-css', function() { | |
var sourcemaps = require('gulp-sourcemaps'); | |
return gulp.src(buildDir + '**.css') | |
.pipe(sourcemaps.init()) | |
.pipe(minifyCss(minifyCssSettings)) | |
.pipe(sourcemaps.write('./maps')) | |
.pipe(gulp.dest(buildDir)); | |
}); | |
// Minify PHP - not scientific, very basic | |
gulp.task('minify-php', function() { | |
var replace = require('gulp-replace'); | |
return gulp.src([buildDir + '**.php']) | |
.pipe(require('gulp-trimlines')()) | |
.pipe(replace(/\n\n/g, '\n')).pipe(replace(/\n\n/g, '\n')) | |
.pipe(replace(/\>\n\</g, '><')) | |
.pipe(replace(/([class|aria-hidden|rel|id|data-src|fill|title|itemprop|charset|href|charset|content|property|itemtype|name|data-src|placeholder|style])\=\"([A-z-\#\-\:\/\;0-9\.]+?)\"/g, '$1=$2')) | |
.pipe(gulp.dest(buildDir)); | |
}); | |
// Concat the prism CSS to main CSS to save a request | |
gulp.task('concat-prism-css', function() { | |
return gulp.src([buildDir + 'style.css', buildDir + 'js/libs/prism.css']).pipe(require('gulp-concat')('style.css')).pipe(gulp.dest(buildDir)); | |
}); | |
// Concat all CSS as a backup | |
gulp.task('concat-all-css', function() { | |
return gulp.src([buildDir + 'above-fold.css', buildDir + 'style.css']).pipe(require('gulp-concat')('all.css')).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/**') | |
.pipe(sourcemaps.init()) | |
.pipe(require('gulp-stylus')({ compress: false })) | |
.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 MooTools History | |
gulp.task('clone-history', function(done) { | |
require('gulp-git').clone('https://github.com/cpojer/mootools-history.git', { args: buildDir + 'js/libs/mootools-history' }, function() { | |
done(); | |
}); | |
}); | |
// Clones down the Prism repo | |
gulp.task('clone-prism', function(done) { | |
require('gulp-git').clone('https://github.com/LeaVerou/prism.git', { args: buildDir + 'js/libs/prism' }, function(err) { | |
done(); | |
}); | |
}); | |
// Move the Prism CSS file out of its burried place | |
gulp.task('move-prism-css', function() { | |
return gulp.src(buildDir + 'js/libs/prism/themes/prism.css').pipe(minifyCss(minifyCssSettings)).pipe(gulp.dest(buildDir + 'js/libs/')); | |
}); | |
// Concatenate and move the Prism JS files | |
gulp.task('move-prism-js', function() { | |
var base = buildDir + 'js/libs/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/libs/')); | |
}); | |
// Move the example files over | |
gulp.task('move-example-files', function() { | |
gulp.src('examples/**').pipe(gulp.dest(buildDir + 'examples/')); | |
}); | |
// Remove the stuff from prism we never wanted | |
gulp.task('remove-prism', function() { | |
return gulp.src(buildDir + 'js/libs/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')('{{ VERSION }}', build)).pipe(gulp.dest(buildDir)); | |
}); | |
// Create ZIP of this for backup | |
gulp.task('create-backup-zip', function() { | |
return gulp.src('./**').pipe(require('gulp-zip')('punky_source.zip')).pipe(gulp.dest('../')); | |
}); | |
// Move dist files to Wordpress-visible theme | |
gulp.task('move-to-wordpress', function() { | |
return gulp.src(buildDir + '**').pipe(gulp.dest('../punky')); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment