如何防止 grunt-nodemon 重启所有应用程序

How to prevent grunt-nodemon from restarting all apps

我正在 运行ning node on Windows 10。我有三个节点应用程序,我希望能够使用一个方便的 g运行t 命令启动它们.此外,如果我修改任何应用程序,我希望节点自动重启。

我为此使用了 grunt-nodemon and 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 这会给出错误,因为该应用程序已经 运行ning。有没有办法让 grunt-watch 终止节点进程并重新启动它?

我认为答案可能相当简单。 Nodemon 有一个忽略选项。对于三个应用程序 nodemon grunt 配置中的每一个,您都可以将它们配置为忽略其他应用程序的目录。这样,他们只有在更改自己的文件而不是其他项目的文件时才开始重新启动。让我知道情况如何。 :) 有关设置配置的忽略部分的细节可以在 nodemons 文档和 grunt-nodemons 文档中找到。

Patrick Motard 的回答让我思考 nodemon 所在的目录 运行 以及它如何观察文件的变化。似乎自从我在所有节点应用程序的父目录中启动 grunt 以来,每个 nodemon 进程都在寻找所有这些目录中的更改。因此,我使用 options.cwd 设置将 nodemon 进程的工作目录设置为每个应用程序的相应目录。这似乎解决了它。这是工作解决方案:

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