Skip to content

Instantly share code, notes, and snippets.

@sutter
Created May 26, 2015 12:02
Show Gist options
  • Save sutter/996f64fc1b781e4922fd to your computer and use it in GitHub Desktop.
Save sutter/996f64fc1b781e4922fd to your computer and use it in GitHub Desktop.
gulpfile
'use-strict';
/*
* Folder path
*/
var appSrc = './app';
var appBuild = './dist';
var appTemp = './.tmp';
/*
* Add Gulp and tools
*/
var gulp = require('gulp');
var $ = require('gulp-load-plugins')();
var del = require('del');
var runSequence = require('run-sequence');
var browserSync = require('browser-sync');
var pagespeed = require('psi');
var reload = browserSync.reload;
var cmq = require('gulp-combine-media-queries');
/*
* Scripts
*/
gulp.task('script', function() {
return gulp.src([
//appSrc + '/assets/js/velocity.min.js',
//appSrc + '/assets/js/jquery.smoothState.js',
appSrc + '/assets/js/script.js'
])
.pipe(reload({
stream: true,
once: true
}))
.pipe($.jshint())
.pipe($.jshint.reporter('jshint-stylish'))
.pipe($.concat('script.js'))
.pipe(gulp.dest( appTemp + '/assets/js/' ))
.pipe(gulp.dest( appBuild + '/assets/js/' ))
.pipe($.uglify())
.pipe($.rename('script.min.js'))
.pipe(gulp.dest( appTemp + '/assets/js/' ))
.pipe(gulp.dest( appBuild + '/assets/js/' ))
.pipe($.size({
title: 'scripts'
}))
.pipe($.if(!browserSync.active, $.jshint.reporter('fail')));
});
/*
* Images
*/
gulp.task('images', function() {
return gulp.src( appSrc + '/assets/img/**/*.{jpg,png,gif,svg}' )
.pipe($.cache($.imagemin({
progressive: true,
interlaced: true
})))
.pipe(gulp.dest( appBuild + '/assets/img/' ))
.pipe($.size({
title: 'images'
}));
});
/*
* SVG
*/
gulp.task('svg', function() {
return gulp.src( appSrc + '/assets/img/**/*.svg' )
.pipe($.cache($.imagemin({
progressive: true,
interlaced: true
})))
.pipe(gulp.dest( appSrc + '/assets/img/' ))
.pipe($.size({
title: 'svg'
}));
});
/*
* Copy All Files At The Root Level (app)
*/
gulp.task('copy', function() {
return gulp.src([
appSrc + '/.htaccess',
appSrc + '/robots.txt',
appSrc + '/favicon.ico',
], {
dot: true
}).pipe(gulp.dest( appBuild ))
.pipe($.size({
title: 'copy'
}));
});
/*
* Fonts
*/
gulp.task('fonts', function() {
return gulp.src( appSrc + '/assets/font/**' )
.pipe(gulp.dest( appBuild + '/assets/font' ))
.pipe($.size({
title: 'fonts'
}));
});
/*
* Styles
*/
gulp.task('styles', function() {
return gulp.src( appSrc + '/assets/scss/**/*.scss' )
.pipe($.changed('styles', {
extension: '.scss'
}))
.pipe($.sass({
precision: 10,
onError: console.error.bind(console, 'Sass error:'),
includePaths: require('node-bourbon').includePaths
})
.on('error', console.error.bind(console))
)
.pipe(gulp.dest( appTemp + '/assets/css/' ))
.pipe(gulp.dest( appBuild + '/assets/css/' ))
.pipe(cmq({log: true }))
.pipe($.autoprefixer({
browsers: ['last 2 versions'],
cascade: false
}))
// .pipe($.uncss({
// html: [
// './app/index.html',
// './app/styleguide.html'
// ],
// ignore: [
// /.js-/,
// /.is-/
// ]
// }))
.pipe($.if( '*.css', $.csso() ))
.pipe($.rename('style.min.css'))
.pipe(gulp.dest( appTemp + '/assets/css/' ))
.pipe(gulp.dest( appBuild + '/assets/css/' ))
.pipe($.size({
title: 'styles'
}));
});
/*
* Templates
*/
gulp.task('templates', function() {
gulp.src( appSrc + '/views/pages/**/*.jade')
.pipe($.jade({
pretty:true
})
.on('error', console.error.bind(console))
)
.pipe(gulp.dest( appTemp ))
.pipe(gulp.dest( appBuild ))
});
/*
* HTML Min
*/
gulp.task('minify', function() {
return gulp.src( appBuild + '/**/*.html' )
.pipe($.htmlmin({collapseWhitespace: true}))
.pipe(gulp.dest( appBuild ))
});
/*
* Sitemap
*/
gulp.task('sitemap', function () {
gulp.src( appBuild + '/**/*.html' )
.pipe($.sitemap({
siteUrl: 'http://sutterlity.fr',
changefreq: 'monthly',
priority: 0.5,
lastmod: Date.now()
}))
.pipe(gulp.dest( appBuild ))
});
/*
* Clean
*/
gulp.task('clean', del.bind(null, [
appTemp,
appBuild
]));
/*
* Watch and reload
*/
gulp.task('serve', ['templates','styles','script'], function() {
browserSync({
notify: false,
// Run as an https by uncommenting 'https: true'
// Note: this uses an unsigned certificate which on first access
// will present a certificate warning in the browser.
// https: true,
// proxy: "http://sutterlity.fr/",
server: [ appTemp, appSrc]
});
gulp.watch( appSrc + '/views/**/*.jade', ['templates', reload]);
gulp.watch( appSrc + '/assets/scss/**/*.scss', ['styles', reload]);
gulp.watch( appSrc + '/assets/js/**/*.js', ['script', reload]);
gulp.watch( appSrc + '/assets/img/**/*', reload);
});
/*
* Build Production Files, the Default Task
*/
gulp.task('default', ['clean'], function(cb) {
runSequence('templates', 'styles', 'script', cb);
});
gulp.task('prod', ['default'], function() {
runSequence('images', 'fonts', 'copy', 'minify', 'sitemap' );
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment