Created
October 13, 2015 14:45
Revisions
-
darkwing created this gist
Oct 13, 2015 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,162 @@ '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')); });