首先,这里是一个repo,我的问题有一个非常简单的例子:https://github.com/nkoder/example-of-gulp-less-zero-exit-on-error
我想定义gulp-build管道,它在任何错误时都会失败。这个管道将用于自动化过程(例如,持续集成),因此我需要build命令在失败时返回非零退出代码。它适用于无效的Jade模板或不通过Karma运行的测试。
问题是当我使用gulp-less
从LESS准备CSS时。每当我在执行gulp-less
之后添加任何管道步骤时,所有错误都会被"消耗掉",整个任务将以0退出。但不应该。
- 第一个问题是:如何在退出代码为非零的情况下强制
wrong
任务失败(已解决,请参阅下面的答案) - 第二个问题是:为什么
less()
调用中发出的error
事件后面跟着管道流,而不是使整个任务返回非零退出代码在其他类似情况下,例如Jade或ESLint失败时,返回非零。(尚未解决)
版本:
- 节点5.11.0
- npm 3.8.6
- 吞咽3.9.1
- 不吞咽3.1.0
监听error
事件,然后显式退出进程:
gulp.task('wrong', function () {
return gulp
.src('invalid-styles.less')
.pipe(less().on('error', function(error) {
console.log(error.message);
process.exit(1);
}))
.pipe(gulp.dest('generated-styles.css'));
});