0

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

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

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

В этом случае: Когда только 1 файл кофе модифицирован, работает кофе перекомпилирует все файлы кофе, которые, в свою очередь, сгенерируют 3 файла JS, что, в свою очередь, перезаписывает nodemon 3 раза. Это нежелательно, так как im работает в приложении, которое использует сетевые запросы, и я не хочу, чтобы он выходил из-под контроля.

Можно ли перезапустить nodemon только один раз?

Я думал о конкатенации всех 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"]); 
}; 

ответ

1

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

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

Решение ... даже если не самый лучший ... спасибо –

+0

Вы можете, конечно, что-то ремесло обычай - но я не думаю, что 'черновую-nodemon' плагин имеет что-нибудь еще из коробка, которая решит это. Удачи! – jakerella

0

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

watch: { 
    dist: { 
     files: ['src/dist/**/*.coffee'], 
     tasks: 'newer:coffee' 
    }, 
} 
Смежные вопросы