web-dev-qa-db-ja.com

grunt.jsがデフォルトで警告時にクラッシュしないようにするにはどうすればよいですか?

私はGruntを使用して、監視タスクでCoffeeScriptとStylusをコンパイルしています。また、エディター(SublimeText)を設定して、ページから離れるたびにファイルを保存します(作業を失うのは嫌です)。

残念ながら、Gruntがコンパイル中のファイルのいずれかで構文エラーに遭遇すると、警告をスローし、Aborted due to warningsで終了します。 --forceを渡すことで、これを停止できます。デフォルトの動作を中止しないようにする(またはGruntを終了するのに十分重要なタスクの警告を制御する)方法はありますか?

19
futuraprime

必要なタスクを実行する独自のタスクを登録します。次に、forceオプションを渡す必要があります。

grunt.registerTask('myTask', 'runs my tasks', function () {
    var tasks = ['task1', ..., 'watch'];

    // Use the force option for all tasks declared in the previous line
    grunt.option('force', true);
    grunt.task.run(tasks);
});
29
asgoth

asgoth の解決策を Adam Hutchinson の提案で試しましたが、強制フラグがすぐにfalseに戻されていることがわかりました。 grunt.task grunt.task.runのAPIドキュメントを読むと、次のように記載されています。

TaskListで指定されたすべてのタスクは、現在のタスクが完了した直後に、指定された順序で実行されます。

つまり、grunt.task.runを呼び出した直後に、強制フラグをfalseに戻すことはできませんでした。私が見つけた解決策は、後で強制フラグをfalseに設定する明示的なタスクを用意することでした。

grunt.registerTask('task-that-might-fail-wrapper','Runs the task that might fail wrapped around a force wrapper', function() {
    var tasks;
    if ( grunt.option('force') ) {
        tasks = ['task-that-might-fail'];
    } else {
        tasks = ['forceon', 'task-that-might-fail', 'forceoff'];
    }
    grunt.task.run(tasks);
});

grunt.registerTask('forceoff', 'Forces the force flag off', function() {
    grunt.option('force', false);
});

grunt.registerTask('forceon', 'Forces the force flag on', function() {
    grunt.option('force', true);
});
3
DavyBoy