2013-09-26 17 views
0

我有多个子任务的呼噜声手表任务看LESS,CoffeeScript的等如何在更新多个文件时防止多次实时重新加载grunt?

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

我也有我写的是负责处理一组第三方文件得到经常更新的自定义任务。任务更新第三方javascript和html文件中的几个路径,然后将它们重新分配到主项目中的适当位置。

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

是否有任何方法来配置监视任务,将所有实时重装事件合并到一个单独的“重新加载”事件中?

回答

1

我还没有亲自尝试过这个,但你可能会发现tiny-lr值得研究。如果你正在编写自定义任务,那么你可以张贴到微小-LR服务器的请求一次重新加载多个文件(你可以通过像咕噜壳可能做到这一点):

# notify a single change 
curl http://localhost:35729/changed?files=style.css 

# notify using a longer path 
curl http://localhost:35729/changed?files=js/app.js 

# notify multiple changes, comma or space delimited 
curl http://localhost:35729/changed?files=index.html,style.css,docs/docco.css 

我不是肯定,如果标准配置确实需要你对自己的东西,但它值得一试:

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

grunt.registerTask('reload', ['tinylr-start', 'watch']); 

还有grunt-newer它只能运行基于已更改的文件的任务。我将这与我的手表设置一起使用,并节省了大量时间,因为每次只保存一个文件时不需要处理每个文件。

希望这会有所帮助。

相关问题