Как запретить 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
убить процесс узла и перезапустить его?
2 ответа
Я думаю, что ответ может быть довольно простым. У Nodemon есть опция игнорирования. Для каждой из трех ваших конфигураций узловых узлов вы можете настроить их так, чтобы они игнорировали каталоги других приложений. Таким образом, они только начинают свой перезапуск, когда изменяются их собственные файлы, а не файлы других проектов. Дайте мне знать, как это происходит.:) Подробности настройки раздела игнорирования в config можно найти как в документации по nodemons, так и в документации по grunt-nodemons.
Ответ Патрика Мотарда заставил меня задуматься о том, какой каталог 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'])
}