2013-12-07 62 views
0

我正在使用Grunt和grunt服务器任务执行手表任务。不幸的是,在保存较少或咖啡文件后,应该由观看触发的“默认”任务不会被触发,因此浏览器不会实时重新加载。Grunt手表在grunt服务器任务期间不起作用

我在寻找问题,但没有找到合适的解决方案。

这里是我的Gruntfile.coffee的摘录:

grunt.registerTask "server", [ 
    'less' 
    'coffee' 
    'copy' 
    "concurrent:server" 
    "connect:livereload" 
    "open" 
    "watch" 
] 

grunt.registerTask "default", [ 
    'less' 
    'coffee' 
    'copy' 
] 

watch: 
    coffee: 
     files: [ 
      '<%= assets %>/scripts/{,*/}*.coffee' 
      'Gruntfile.coffee' 
      '<%= assets %>/scripts/*.coffee' 
     ] 

    less: 
     files: [ 
      '<%= assets %>/styles/**/**/*.less' 
      '<%= assets %>/styles/**/*.less' 
      '<%= assets %>/styles/*.less' 
      ] 

    files: [ 
     'app/**/*.php' 
     'app/**/*.html' 
    ] 

    tasks: 'default' 

    livereload: 
     options: 
      livereload: LIVERELOAD_PORT # is 37562 

     files: [ 
      "<%= assets %>/{,*/}*.html" 
      '<%= assets %>/styles/**/*.less' 
      '<%= assets %>/scripts/*.coffee' 
      '<%= assets %>/styles/**/*.less' 
      '<%= assets %>/styles/*.less' 
     ] 

感谢您的帮助提前! :)

回答

2

为什么不为每个观察的文件组定义单独的任务?

watch: 
    coffee: 
    files: [ 
     'Gruntfile.coffee' 
     '<%= assets %>/scripts/*.coffee' 
    ] 
    tasks: 'coffee' 

    less: 
    files: [ 
     '<%= assets %>/styles/**/**/*.less' 
     '<%= assets %>/styles/**/*.less' 
     '<%= assets %>/styles/*.less' 
    ] 
    tasks: 'less 

这将编译你的CoffeeScript当.coffee文件被保存,编译时少一个.less文件被保存。 coffee文件更改时重新编译所有less文件是没有意义的,反之亦然。

2

您正在观看的任务配置不正确。它需要files观看和tasks运行。您的coffeeless目标都配置为观看文件但不运行任务。然后你有一个不在任何目标范围内的区块。

采取在手表的任务例子仔细一看:https://github.com/gruntjs/grunt-contrib-watch#examples

下面是一个(半)固定配置:

watch: 
    coffee: 
    files: [ 
     '<%= assets %>/scripts/{,*/}*.coffee' 
     'Gruntfile.coffee' 
     '<%= assets %>/scripts/*.coffee' 
    ] 
    tasks: ['coffee'] 

    less: 
    files: [ 
     '<%= assets %>/styles/**/**/*.less' 
     '<%= assets %>/styles/**/*.less' 
     '<%= assets %>/styles/*.less' 
    ] 
    tasks: ['less'] 

    TARGETNAMENEEDEDHERE: 
    files: [ 
     'app/**/*.php' 
     'app/**/*.html' 
    ] 
    tasks: 'default' 

    ### 
    The files in this target are not configured correctly. 
    Typically people create a livereload target to watch destination files. 
    So the livereload will only trigger when one of the above targets writes 
    to a destination file. But you're watching source files below. 
    ### 
    livereload: 
     options: 
     livereload: LIVERELOAD_PORT # is 37562 
     files: [ 
     "<%= assets %>/{,*/}*.html" 
     '<%= assets %>/styles/**/*.less' 
     '<%= assets %>/scripts/*.coffee' 
     '<%= assets %>/styles/**/*.less' 
     '<%= assets %>/styles/*.less' 
     ]