node.jsgruntjsnodemongrunt-concurrentgrunt-nodemon

How to prevent grunt-nodemon from restarting all apps


I'm running node on Windows 10. I have three node apps and I want to be able to start them all up with one handy grunt command. Furthermore, I want node to automatically restart if I modify any of the apps.

I'm using a combination of grunt-nodemon and grunt-concurrent for this. The node processes all start up fine.

The problem is that if I modify the code related to any of them they all restart, which takes a long time. How can I make it so that nodemon only restarts the app whose code I actually modified?

var loadGruntTasks = require('load-grunt-tasks')

module.exports = function(grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),

        concurrent: {
            runAll: {
                tasks: ['nodemon:app1', 'nodemon:app2', 'nodemon:app3'],
                options: {
                    logConcurrentOutput: true
                }
            }
        },

        nodemon: {
            app1: {
                script: './app1/app.js'
            },

            app2: {
                script: './app2/app.js'
            },

            app3: {
                script: './app3/app.js'
            }
        }
    })

    loadGruntTasks(grunt)
    grunt.registerTask('default', ['concurrent:runAll'])
}

Update

If I use grunt-watch instead of grunt-nodemon, only the app whose code I modified will restart. The problem is that grunt-watch only knows to run node app.js which gives an error because the app is already running. Is there a way to make grunt-watch kill the node process and restart it?


Solution

  • I think the answer could be fairly simple. Nodemon has an ignore option. For each of your three applications nodemon grunt configurations you can configurate them to ignore the directories of the other applications. That way they only kick off their restart when their own files are changed and not those of other projects. Let me know how that goes. :) Specifics about setting up the ignore section of config can be found in both nodemons documentation and grunt-nodemons documentation.