var gulp = require('gulp'); /* CoffeeScript compile deps */ var path = require('path'); var gutil = require('gulp-util'); var concat = require('gulp-concat'); var rename = require('gulp-rename'); var coffee = require('gulp-coffee'); var cache = require('gulp-cached'); var remember = require('gulp-remember'); var plumber = require('gulp-plumber'); var livereload = require('gulp-livereload'); var nodemon = require("gulp-nodemon"); var jade = require("gulp-jade"); var net = require("net"); /* For Browserify task; see https://github.com/greypants/gulp-starter/blob/master/gulp/tasks/browserify.js */ var browserify = require('browserify'); var watchify = require('watchify'); var bundleLogger = require('./gulp.bundleLogger'); var handleErrors = require('./gulp.handleErrors'); var source = require('vinyl-source-stream'); task = { "source": ["templateUtil.coffee", "routes/**/*.coffee", "models/**/*.coffee", "app.coffee", "util.coffee", "db.coffee"], "frontend": ["./public/js/script.coffee"], "jade": ["views/angular/**/*.jade"] } gulp.task('coffee', function() { return gulp.src(task.source, {base: "."}) .pipe(plumber()) .pipe(cache("coffee")) .pipe(coffee({bare: true}).on('error', gutil.log)).on('data', gutil.log) .pipe(remember("coffee")) .pipe(gulp.dest(".")); }); gulp.task('browserify', function() { var bundler = browserify({ cache: {}, packageCache: {}, fullPaths: true, entries: task.frontend, extensions: ['.coffee'], debug: true }); var bundle = function() { bundleLogger.start(); console.log("Bundling..."); return bundler .bundle() .on('error', handleErrors) .pipe(source('bundled.js')) .pipe(gulp.dest('./public/js/')) .on('end', bundleLogger.end); }; if(global.isWatching) { console.log("Starting Browserify watcher..."); bundler = watchify(bundler); bundler.on('update', bundle); } return bundle(); }); gulp.task("jade", function() { return gulp.src(task.jade, {base: "./views/angular"}) .pipe(plumber()) .pipe(cache("jade")) .pipe(jade({locals: require("./templateUtil")})) .pipe(remember("jade")) .pipe(gulp.dest("public/templates")) }); function checkServerUp(){ setTimeout(function(){ var sock = new net.Socket(); sock.setTimeout(50); sock.on("connect", function(){ console.log("Triggering page reload..."); livereload.changed(); sock.destroy(); }) .on("timeout", checkServerUp) .on("error", checkServerUp) .connect(3000); }, 70); } gulp.task('watch', function () { global.isWatching = true; livereload.listen(); gulp.watch(task.jade, ['jade']) gulp.watch(['./**/*.css', 'views/**/*.jade', '!views/angular/**/*.jade', 'package.json']).on('change', livereload.changed); gulp.watch(['public/templates/**/*.html']).on('change', function() { livereload.changed("*"); }); // We need to explicitly reload everything here; Angular doesn't do partial reloading gulp.watch(task.source, ['coffee']); // theseus disabled for now, it was screwing with my tracebacks //nodemon({script: "./bin/www", ext: "js", nodeArgs: ['/usr/bin/node-theseus']}).on("start", checkServerUp); nodemon({script: "./bin/www", ext: "js", delay: 500}).on("start", checkServerUp); }); gulp.task('default', ['coffee', 'jade', 'watch', 'browserify']);