当较少的文件中存在语法错误时,防止`grunt-watch`循环播放?

时间:2013-12-16 03:46:55

标签: gruntjs grunt-contrib-watch

我使用grunt-watch重新构建我的样式表:

    watch: {
        less: {
            files: ['media/less/**/*.less'],
            tasks: ['less'],
            options: {
                atBegin: true,
                spawn: false
            }
        }
    }

但是如果任何.less文件中存在语法错误,则任务只是循环,尝试每秒重新构建.less个文件......这使得调试相当困难,因为错误消息很快滚动过去。

有没有办法解决这个问题,所以grunt-watch只会在.less文件再次更改后重新运行任务?

这是使用:

grunt@0.4.2
grunt-contrib-less@0.8.3
grunt-contrib-watch@0.5.3

2 个答案:

答案 0 :(得分:2)

我认为您所描述的问题是this one,该问题已在master中修复但尚未发布(截至2013/12/17)。

答案 1 :(得分:0)

好吧,出于调试目的,您可以使用自定义任务执行less任务的简单信封:

grunt.registerTask('myless', 'my less task', function() {
  // do whatever debugging you want and stop the loop if needed.
  grunt.task.run(['less']);
});

然后使用myless中的watch任务。

更新:

这个想法是因为任何对less的重复调用现在通过你的代码 - 你可以做任何需要提供更具体的输出或防止重复调用,如果失败是“期望的”结果并且应该失败,但不是循环。

更新2:

这样的事情:

watch: {
    `less`: {
        files: ['**/*.less'],   // or whatever the extension is
        tasks: ['myless']       // your envelope task
    }
}

var flag;

grunt.registerTask('myless', 'My LESS task', function() {
    if(flag === true) {
        // if you are here - it means watch just invoked you repeatedly
        // do whatever you need to analyze the issue (includig running an additional task)

        flag = false;
        return; // you exit task without altering any less files again - 
                // that should NOT trigger watch again
    } else {
        flag = true;
        grunt.task.run(['less']);
    }
});