Как запретить grunt-nodemon перезапускать все приложения

Я запускаю узел в Windows 10. У меня есть три приложения узла, и я хочу иметь возможность запускать их все с помощью одной удобной команды grunt. Кроме того, я хочу, чтобы узел автоматически перезапускался, если я изменяю любое из приложений.

Я использую комбинацию grunt-nodemon и grunt-concurrent для этого. Все процессы узла запускаются нормально.

Проблема в том, что если я изменяю код, относящийся к любому из них, они все перезапускаются, что занимает много времени. Как я могу сделать так, чтобы nodemon перезапускал только то приложение, код которого я фактически изменил?

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'])
}

Обновлять

Если я использую grunt-watch вместо grunt-nodemon, перезапустится только то приложение, код которого я изменил. Проблема в том, что grunt-watch знает только о запуске node app.js, что выдает ошибку, потому что приложение уже запущено. Есть ли способ заставить grunt-watch убить процесс узла и перезапустить его?


person d512    schedule 20.05.2016    source источник


Ответы (2)


Я думаю, что ответ может быть довольно простым. В Nodemon есть опция игнорирования. Для каждой из ваших трех конфигураций nodemon grunt приложений вы можете настроить их так, чтобы они игнорировали каталоги других приложений. Таким образом, они начинают свой перезапуск только тогда, когда изменяются их собственные файлы, а не файлы других проектов. Дайте мне знать, как это происходит. :) Подробности о настройке секции игнорирования в конфиге можно найти как в документации nodemons, так и в документации grunt-nodemons.

person Patrick Motard    schedule 21.05.2016
comment
Спасибо, это было не совсем то решение, которое я выбрал, но я отдам вам должное, потому что ваш ответ заставил меня понять, что происходит. - person d512; 21.05.2016
comment
@user1334007 user1334007 какое было решение? - person Patrick Motard; 21.05.2016
comment
Только что выложил, посмотри - person d512; 21.05.2016

Ответ Патрика Мотарда заставил меня задуматься о том, в каком каталоге работает nodemon и как он отслеживает изменения в файлах. Похоже, что с тех пор, как я начал работать в родительском каталоге всех узловых приложений, каждый процесс nodemon искал изменения во всех этих каталогах. Поэтому я установил рабочий каталог процессов nodemon в соответствующий каталог для каждого приложения, используя параметр options.cwd. Это, казалось, исправило это. Вот рабочее решение:

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: 'app.js',
                options: {
                    cwd: './app1'
                }
            },

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

            app3: {
                script: 'app.js',
                options: {
                    cwd: './app3'
                }
            }
        }
    })

    loadGruntTasks(grunt)
    grunt.registerTask('default', ['concurrent:runAll'])
}
person d512    schedule 21.05.2016