Javascript 当更新多个文件时,如何防止grunt实时重新加载多次?

Javascript 当更新多个文件时,如何防止grunt实时重新加载多次?,javascript,gruntjs,livereload,grunt-contrib-watch,Javascript,Gruntjs,Livereload,Grunt Contrib Watch,我有一个grunt watch任务,包含多个子任务,用于减少观看次数、咖啡脚本等 watch: jade: files: ['<%= yeoman.app %>/*.jade'] tasks: ['jade'] less: files: ['<%= yeoman.css %>/*.less'] tasks: ['less']

我有一个grunt watch任务,包含多个子任务,用于减少观看次数、咖啡脚本等

    watch:
        jade:
            files: ['<%= yeoman.app %>/*.jade']
            tasks: ['jade']
        less:
            files: ['<%= yeoman.css %>/*.less']
            tasks: ['less']
        coffee:
            files: ['<%= yeoman.scripts %>/*.coffee']
            tasks: ['coffee']
        edge:
            files: ['<%= yeoman.comp %>/*']
            tasks: ['edge']
        livereload:
            options:
                livereload: true
            files: [
                '<%= yeoman.app %>/*.html'
                '<%= yeoman.css %>/*.css'
                '<%= yeoman.scripts %>/*.js'
            ]
观察:
玉:
文件:['/*.jade']
任务:['jade']
减:
文件:['/*.less']
任务:[“更少”]
咖啡:
文件:['/*.coffee']
任务:[“咖啡”]
边缘:
文件:['/*']
任务:[“边缘”]
利弗雷罗德:
选项:
利弗雷罗德:没错
档案:[
“/*.html”
“/*.css”
“/*.js”
]
我还编写了一个自定义任务,负责处理一组经常更新的第三方文件。任务更新第三方javascript和html文件中的多个路径,然后将它们重新分发到主项目中的适当位置

问题是,当这些文件中的每一个都写入到它们的目标时,相关的grunt任务就会运行,而每一个文件都会触发实时重新加载。因此,如果写入4个文件,则会发生4次单独的重新加载


有没有办法将监视任务配置为在“结束”时将所有实时重新加载事件合并为一次重新加载?

我没有亲自尝试过,但您可能会发现值得研究。如果您正在编写一个自定义任务,那么您可以向微型lr服务器发送一个请求,以便一次重新加载多个文件(您可以通过grunt shell之类的方式完成此操作):

我不确定标准配置是否能满足您的要求,但值得一试:

grunt.loadNpmTasks('tiny-lr');
grunt.initConfig({
  watch: {
    reload: {
      files: ['**/*.html', '**/*.js', '**/*.css', '**/*.{png,jpg}'],
      tasks: 'tinylr-reload'
    }
  }
});

grunt.registerTask('reload', ['tinylr-start', 'watch']);
还有一个仅基于更改的文件运行任务的。我在手表设置中使用它,它节省了很多时间,因为每次只保存一个文件时,它不必处理每个文件


希望这能有所帮助。

我还没有亲自尝试过,但您可能会发现值得研究。如果您正在编写一个自定义任务,那么您可以向微型lr服务器发送一个请求,以便一次重新加载多个文件(您可以通过grunt shell之类的方式完成此操作):

我不确定标准配置是否能满足您的要求,但值得一试:

grunt.loadNpmTasks('tiny-lr');
grunt.initConfig({
  watch: {
    reload: {
      files: ['**/*.html', '**/*.js', '**/*.css', '**/*.{png,jpg}'],
      tasks: 'tinylr-reload'
    }
  }
});

grunt.registerTask('reload', ['tinylr-start', 'watch']);
还有一个仅基于更改的文件运行任务的。我在手表设置中使用它,它节省了很多时间,因为每次只保存一个文件时,它不必处理每个文件

希望这有帮助