Запуск grunt-nodemon один раз после одновременных изменений файла

Это мой Gruntfile. Я одновременно запускаю nodemon для запуска своего приложения и наблюдаю за изменениями в моем coffeescript.

Coffeescript принимает файлы src и превращает их в файлы JS (в настоящее время 3, main.coffee, Person.coffee и Car.coffee)

Я хочу, чтобы мой Nodemon перезапускался каждый раз, когда эти файлы менялись, чтобы запускать его с последними сохраненными изменениями.

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

Можно ли будет перезапустить nodemon всего 1 раз?

Я думал о объединении всех файлов JS, но это мешает модульности моих файлов JS.

Я также думал о "просмотре" файлов 1 на 1, но это может стать громоздким, если я достигну 50 файлов.

Как я могу решить эту проблему?

module.exports = function(grunt) {
    "use strict";

    grunt.initConfig({

        pkg: grunt.file.readJSON( 'package.json' ),

        coffee: {
            dist: {
                join: true,
                expand: true,
                flatten: true,
                cwd: 'src/dist',
                src: ['*.coffee'],
                dest: 'dist',
                ext: '.js'
            },
        },

        watch: {
            dist: {
                files: ['src/dist/**/*.coffee'],
                tasks: 'coffee'
            },
        },

        concurrent: {
            dev: {
                tasks: ['nodemon', 'watch'],
            options: {
                logConcurrentOutput: true
            }
        }
        },
        nodemon: {
            dev: {
                script: 'dist/main.js',
            },
            options:{
                watch: "dist/**/*.js"
            }
        }
    });

    grunt.loadNpmTasks('grunt-concurrent');
    grunt.loadNpmTasks('grunt-contrib-coffee');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-nodemon');

    grunt.registerTask("default", ["coffee", "concurrent"]);
};

2 ответа

Решение

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

nodemon: {
    dev: {
        script: 'dist/main.js',
    },
    options:{
        watch: "dist/**/*.js",
        delayTime: 2000
    }
}

Ты можешь использовать grunt-newer, Тогда в watch В задании вы можете указать, что хотите компилировать только файлы, которые изменились.

watch: {
    dist: {
        files: ['src/dist/**/*.coffee'],
        tasks: 'newer:coffee'
    },
}
Другие вопросы по тегам