Skip to content

Instantly share code, notes, and snippets.

@johnfoderaro
Created February 26, 2017 01:49
Show Gist options
  • Save johnfoderaro/b0bfa5b2ab107a8a49fbf63be751f13c to your computer and use it in GitHub Desktop.
Save johnfoderaro/b0bfa5b2ab107a8a49fbf63be751f13c to your computer and use it in GitHub Desktop.
Express app Gulpfile for asset build/management with Browersify, Node Sass, Imagemin, and Browser Sync
'use strict';
const browserify = require('browserify');
const bs = require('browser-sync').create();
const buffer = require('vinyl-buffer');
const del = require('del');
const gif = require('imagemin-gifsicle');
const gulp = require('gulp');
const gutil = require('gulp-util');
const imagemin = require('gulp-imagemin');
const jpg = require('imagemin-jpegoptim');
const png = require('imagemin-optipng');
const rename = require('gulp-rename');
const sass = require('gulp-sass');
const source = require('vinyl-source-stream');
const svg = require('imagemin-svgo');
gulp.task('css', () => {
return gulp.src('./src/css/main.scss')
.pipe(sass({
sourceMapEmbed: true,
outputStyle: 'compressed'
}).on('error', sass.logError))
.pipe(rename({ suffix: '.min' }))
.pipe(gulp.dest('./public/css'));
});
gulp.task('css-copy', () => {
del('./public/css/vendor/**/*').then(() => {
return gulp.src('./src/scss/vendor/**/*')
.pipe(gulp.dest('./public/css/vendor'));
});
});
gulp.task('javascript', () => {
return browserify('./src/js/main.js', { debug: true })
.transform('babelify', { presets: ['es2015'] })
.transform('uglifyify')
.bundle()
.pipe(source('main.min.js'))
.pipe(buffer())
.pipe(gulp.dest('./public/js'));
});
gulp.task('javascript-copy', () => {
del('./public/js/vendor/**/*').then(() => {
return gulp.src('./src/js/vendor/**/*')
.pipe(gulp.dest('./public/js/vendor'));
});
});
// TODO run this on production builds only
gulp.task('image', () => {
gulp.src(['./src/img/**/*'])
.pipe(imagemin([
jpg({ max: 50 }),
png({ optimizationLevel: 3 }),
gif({ optimizationLevel: 3 }),
svg({
minifyStyles: true,
removeDoctype: true
})
]))
.pipe(gulp.dest('./public/img'));
});
gulp.task('image-copy', () => {
del('./public/img/**/*').then(() => {
return gulp.src('./src/img/**/*')
.pipe(gulp.dest('./public/img'));
});
});
gulp.task('reload', (done) => {
bs.reload();
done();
});
gulp.task('default', () => {
bs.init({
port: 3001,
notify: false,
ghostMode: true,
proxy: 'http://localhost:3000',
});
gulp.watch(['src/scss/main.js', 'src/scss/lib/**/*.js'], ['css', 'reload']);
gulp.watch(['src/scss/vendor/**/*'], ['css-copy', 'reload']);
gulp.watch(['src/js/main.js', 'src/js/lib/**/*.js'], ['javascript', 'reload']);
gulp.watch(['src/js/vendor/**/*'], ['javascript-copy', 'reload']);
gulp.watch(['src/img/**/*'], ['image-copy', 'reload']);
gulp.watch(['views/**/*'], ['reload']);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment