Запуск 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'
},
}