Предотвратить цикл `grunt-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 ответа

Решение

Я думаю, что проблема, которую вы описываете, является этой, которая была исправлена ​​в master, но еще не была выпущена (по состоянию на 2013/12/17).

Ну, для отладки вы можете сделать простой конверт из 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']);
    }
});
Другие вопросы по тегам