"use strict"; var fork = require('child_process').fork, env = process.env, worker, incomplete = []; module.exports = function(grunt) { function update(action, filepath, target) { var args = [], fromFile = '', compiling = '', time = Date.now(); if (!grunt.option('verbose')) { args.push('--log-level=info'); } if (target === 'lessUpdated_Client') { fromFile = ['js', 'tpl', 'acpLess']; compiling = 'clientLess'; } else if (target === 'lessUpdated_Admin') { fromFile = ['js', 'tpl', 'clientLess']; compiling = 'acpLess'; } else if (target === 'clientUpdated') { fromFile = ['clientLess', 'acpLess', 'tpl']; compiling = 'js'; } else if (target === 'templatesUpdated') { fromFile = ['js', 'clientLess', 'acpLess']; compiling = 'tpl'; } else if (target === 'serverUpdated') { fromFile = ['clientLess', 'acpLess', 'js', 'tpl']; } fromFile = fromFile.filter(function(ext) { return incomplete.indexOf(ext) === -1; }); args.push('--from-file=' + fromFile.join(',')); incomplete.push(compiling); worker.kill(); worker = fork('app.js', args, { env: env }); worker.on('message', function() { if (incomplete.length) { incomplete = []; if (grunt.option('verbose')) { grunt.log.writeln('NodeBB restarted in ' + (Date.now() - time) + ' ms'); } } }); } grunt.initConfig({ watch: { lessUpdated_Client: { files: ['public/*.less', 'node_modules/nodebb-*/*.less', 'node_modules/nodebb-*/*/*.less', 'node_modules/nodebb-*/*/*/*.less', 'node_modules/nodebb-*/*/*/*/*.less'] }, lessUpdated_Admin: { files: ['public/**/*.less'] }, clientUpdated: { files: ['public/src/**/*.js', 'node_modules/nodebb-*/*.js', 'node_modules/nodebb-*/*/*.js', 'node_modules/nodebb-*/*/*/*.js', 'node_modules/nodebb-*/*/*/*/*.js', 'node_modules/templates.js/lib/templates.js'] }, serverUpdated: { files: ['*.js', 'install/*.js', 'src/**/*.js'] }, templatesUpdated: { files: ['src/views/**/*.tpl', 'node_modules/nodebb-*/*.tpl', 'node_modules/nodebb-*/*/*.tpl', 'node_modules/nodebb-*/*/*/*.tpl', 'node_modules/nodebb-*/*/*/*/*.tpl', 'node_modules/nodebb-*/*/*/*/*/*.tpl'] } } }); grunt.loadNpmTasks('grunt-contrib-watch'); if (grunt.option('skip')) { grunt.registerTask('default', ['watch:serverUpdated']); } else { grunt.registerTask('default', ['watch']); } env.NODE_ENV = 'development'; worker = fork('app.js', [], { env: env }); grunt.event.on('watch', update); };