Created
July 19, 2016 14:33
-
-
Save chrisvasey/8eeb6d4a5e7584a03ac0dc6de1616e78 to your computer and use it in GitHub Desktop.
gulpfile.js example (sylus, react.js, bablify etc)
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 source = require('vinyl-source-stream'); | |
var gulp = require('gulp'); | |
var gutil = require('gulp-util'); | |
var browserify = require('browserify'); | |
var babelify = require('babelify'); | |
var watchify = require('watchify'); | |
var notify = require('gulp-notify'); | |
var stylus = require('gulp-stylus'); | |
var autoprefixer = require('gulp-autoprefixer'); | |
var uglify = require('gulp-uglify'); | |
var rename = require('gulp-rename'); | |
var buffer = require('vinyl-buffer'); | |
var browserSync = require('browser-sync'); | |
var reload = browserSync.reload; | |
var historyApiFallback = require('connect-history-api-fallback') | |
/* | |
Styles Task | |
*/ | |
gulp.task('styles',function() { | |
// move over fonts | |
gulp.src('css/fonts/**.*') | |
.pipe(gulp.dest('build/css/fonts')) | |
// Compiles CSS | |
gulp.src('css/style.styl') | |
.pipe(stylus()) | |
.pipe(autoprefixer()) | |
.pipe(gulp.dest('./build/css/')) | |
.pipe(reload({stream:true})) | |
}); | |
/* | |
Images | |
*/ | |
gulp.task('images',function(){ | |
gulp.src('css/images/**') | |
.pipe(gulp.dest('./build/css/images')) | |
}); | |
/* | |
Browser Sync | |
*/ | |
gulp.task('browser-sync', function() { | |
browserSync({ | |
// we need to disable clicks and forms for when we test multiple rooms | |
server : {}, | |
middleware : [ historyApiFallback() ], | |
ghostMode: false | |
}); | |
}); | |
function handleErrors() { | |
var args = Array.prototype.slice.call(arguments); | |
notify.onError({ | |
title: 'Compile Error', | |
message: '<%= error.message %>' | |
}).apply(this, args); | |
this.emit('end'); // Keep gulp from hanging on this task | |
} | |
function buildScript(file, watch) { | |
var props = { | |
entries: ['./scripts/' + file], | |
debug : true, | |
transform: [babelify.configure({stage : 0 })] | |
}; | |
// watchify() if watch requested, otherwise run browserify() once | |
var bundler = watch ? watchify(browserify(props)) : browserify(props); | |
function rebundle() { | |
var stream = bundler.bundle(); | |
return stream | |
.on('error', handleErrors) | |
.pipe(source(file)) | |
.pipe(gulp.dest('./build/')) | |
// If you also want to uglify it | |
// .pipe(buffer()) | |
// .pipe(uglify()) | |
// .pipe(rename('app.min.js')) | |
// .pipe(gulp.dest('./build')) | |
.pipe(reload({stream:true})) | |
} | |
// listen for an update and run rebundle | |
bundler.on('update', function() { | |
rebundle(); | |
gutil.log('Rebundle...'); | |
}); | |
// run it once the first time buildScript is called | |
return rebundle(); | |
} | |
gulp.task('scripts', function() { | |
return buildScript('main.js', false); // this will run once because we set watch to false | |
}); | |
// run 'scripts' task first, then watch for future changes | |
gulp.task('default', ['images','styles','scripts','browser-sync'], function() { | |
gulp.watch('css/**/*', ['styles']); // gulp watch for stylus changes | |
return buildScript('main.js', true); // browserify watch for JS changes | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment