You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.2 KiB
123 lines
3.2 KiB
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 sass = require('gulp-sass'); |
|
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')) |
|
.pipe(reload({stream:true})) |
|
|
|
gulp.src('scss/*.scss') |
|
.pipe(sass({ |
|
includePaths: ['bower_components/foundation/scss'] |
|
})) |
|
.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: ['./src/' + file], |
|
debug : true, |
|
transform: [babelify.configure({ stage : 0 })], |
|
cache: {}, packageCache: {}, fullPaths: true // Requirement of watchify |
|
}; |
|
|
|
// 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(rename('build.js')) |
|
.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('app.jsx', 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 |
|
gulp.watch('scss/**/*', ['styles']); // gulp watch for stylus changes |
|
return buildScript('app.jsx', true); // browserify watch for JS changes |
|
});
|
|
|