Skip to content

Instantly share code, notes, and snippets.

@RoverWire
Created May 7, 2014 04:33

Revisions

  1. RoverWire created this gist May 7, 2014.
    73 changes: 73 additions & 0 deletions Grunt.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,73 @@
    'use strict';

    var request = require('request');

    module.exports = function (grunt) {
    // show elapsed time at the end
    require('time-grunt')(grunt);
    // load all grunt tasks
    require('load-grunt-tasks')(grunt);

    var reloadPort = 35729, files;

    grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    develop: {
    server: {
    file: 'app.js'
    }
    },
    watch: {
    options: {
    nospawn: true,
    livereload: reloadPort
    },
    server: {
    files: [
    'app.js',
    'routes/*.js'
    ],
    tasks: ['develop', 'delayed-livereload']
    },
    js: {
    files: ['public/js/**/*.js'],
    options: {
    livereload: reloadPort
    }
    },
    css: {
    files: ['public/css/**/*.css'],
    options: {
    livereload: reloadPort
    }
    },
    jade: {
    files: ['views/**/*.jade'],
    options: {
    livereload: reloadPort
    }
    }
    }
    });

    grunt.config.requires('watch.server.files');
    files = grunt.config('watch.server.files');
    files = grunt.file.expand(files);

    grunt.registerTask('delayed-livereload', 'Live reload after the node server has restarted.', function () {
    var done = this.async();
    setTimeout(function () {
    request.get('http://localhost:' + reloadPort + '/changed?files=' + files.join(','), function (err, res) {
    var reloaded = !err && res.statusCode === 200;
    if (reloaded) {
    grunt.log.ok('Delayed live reload successful.');
    } else {
    grunt.log.error('Unable to make a delayed live reload.');
    }
    done(reloaded);
    });
    }, 500);
    });

    grunt.registerTask('default', ['develop', 'watch']);
    };