19

我正在使用 Grunt 编译 CoffeeScript 和 Stylus 并执行监视任务。我还设置了我的编辑器(SublimeText),以在每次离开文件时保存文件(我讨厌失去工作)。

不幸的是,如果 Grunt 在它正在编译的任何文件中遇到语法错误,它会抛出一个警告并以Aborted due to warnings. 我可以通过传递来阻止它这样做--force。有什么方法可以不中止默认行为(或控制哪些任务的警告足够重要以退出 Grunt?

4

2 回答 2

29

注册您自己的任务,它将运行您想要的任务。然后你必须通过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);
});
于 2013-03-16T10:41:21.860 回答
3

我用Adam Hutchinson的建议尝试了 asgoth的解决方案,但发现 force 标志立即被设置为 false。阅读 grunt.task.run 的grunt.task API 文档,它指出

taskList 中的每个指定任务将在当前任务完成后立即按照指定的顺序运行。

这意味着我不能在调用 grunt.task.run 后立即将 force 标志设置回 false。我找到的解决方案是让明确的任务在之后将 force 标志设置为 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);
});
于 2014-08-18T09:38:57.887 回答