Rob*_*let 34 javascript jshint gulp
我在我的小项目中使用Gulp来运行测试和lint我的代码.当任何这些任务失败时,Gulp总是以返回码0退出.如果我手动运行jshint,它将以非零代码退出.
我是否需要以某种方式明确告诉Gulp返回有意义的值?这是Gulp的错吗,还是gulp-jshint和gulp-jasmine插件应该受到责备?
Shu*_*awa 12
你需要'返回gulp.src(...',以便任务等待返回的流.
编辑
Gulp任务本质上是异步的.在'gulp.src(...).pipe(...);'时,实际任务尚未执行.在您的示例中,gulp任务在执行实际任务之前将其结果标记为成功.
有一些方法可以让gulp等待你的实际任务.使用回调或返回流或承诺.
https://github.com/gulpjs/gulp/blob/master/docs/API.md#async-task-support
最简单的方法就是返回'gulp.src(...).pipe(...)'的流.如果gulp任务获得流,它将侦听'end'事件和'error'事件.它们对应于返回码0和1.因此,"lint"任务的完整示例将是:
gulp.task('lint', function () {
return gulp.src('./*.js')
.pipe(jshint('jshintrc.json'))
.pipe(jshint.reporter('jshint-stylish'));
});
Run Code Online (Sandbox Code Playgroud)
现在您可以衡量实际花在任务上的时间.
Ale*_*ski 10
@robrich是对的,你必须自己跟踪退出代码,但不需要强有力的方法.process全局是EventEmitter您可以将退出函数绑定到的全局.
var exitCode = 0
gulp.task('test', function (done) {
return require('child_process')
.spawn('npm', ['test'], {stdio: 'pipe'})
.on('close', function (code, signal) {
if (code) exitCode = code
done()
})
})
gulp.on('err', function (err) {
process.emit('exit') // or throw err
})
process.on('exit', function () {
process.nextTick(function () {
process.exit(exitCode)
})
})
Run Code Online (Sandbox Code Playgroud)
此提交中引入了一个修复程序.
它的工作原理如下:
gulp.src("src/**/*.js")
.pipe(jshint())
.pipe(jshint.reporter("default"))
.pipe(jshint.reporter("fail"));
Run Code Online (Sandbox Code Playgroud)
我一直在circleci上使用它,这是一种享受!
| 归档时间: |
|
| 查看次数: |
19902 次 |
| 最近记录: |