如何优雅的处理gulp异常
展开全部
抱歉所有的例子都 Coffee 写的,在知乎小框框里用 Coffee 比 JS 更简短清晰。
我猜想所谓“优雅”的处理有两方面的含义:
1. 如果 Pipeline 出现异常,那么首先需要报错。
2. 在一条 Pipeline 上,可以集中处理多个 Plugins 可能抛出的异常。
第一个问题好办,只要有类似的 `.on 'error', gutil.log` 这样的 hook 就可以处理。如果没有任何 error hook 存在,Node 就会 throw exception,而 Gulp 缺省也会退出(这不是问题,很正常的设计)。
不过,如果仅仅是加 Hook,其实首尾还没那么干净。最好的写法是:
handleError = (err) ->
util.log err
@end() # 不写这句,gulp.watch 不会继续处理由于后续文件更新触发的task
gulp.src 'coffee/**/*.coffee'
.pipe coffee bare: true
.on 'error', (err) ->
handleError.call @, err
# @相当于 js 的 this.
可是,如果整个 pipeline 上有多个 plugins,那么势必写成:
gulp.src 'coffee/**/*.coffee'
.pipe prefixes '# Copyright 2014 (C) Aswesome company'
.on 'error', handleError
.pipe coffee bare: true
.on 'error', handleError
.pipe gulp.dest 'js/'
这就不优雅了。
好在早有人解决了这个问题,用 [gulp-plumber](floatdrop/gulp-plumber: Fixing Node pipes),你可以写成这样:
gulp.src './src/*.coffee'
.pipe plumber()
.pipe prefixer '# Nice code here!'
.pipe coffee()
.pipe gulp.dest('./dist/')
通过为 plumber errorHandler,你可以使用自己的异常处理函数。你也可以通过 `plumber.stop`,让整个 pipeline 恢复到缺省模式。
我猜想所谓“优雅”的处理有两方面的含义:
1. 如果 Pipeline 出现异常,那么首先需要报错。
2. 在一条 Pipeline 上,可以集中处理多个 Plugins 可能抛出的异常。
第一个问题好办,只要有类似的 `.on 'error', gutil.log` 这样的 hook 就可以处理。如果没有任何 error hook 存在,Node 就会 throw exception,而 Gulp 缺省也会退出(这不是问题,很正常的设计)。
不过,如果仅仅是加 Hook,其实首尾还没那么干净。最好的写法是:
handleError = (err) ->
util.log err
@end() # 不写这句,gulp.watch 不会继续处理由于后续文件更新触发的task
gulp.src 'coffee/**/*.coffee'
.pipe coffee bare: true
.on 'error', (err) ->
handleError.call @, err
# @相当于 js 的 this.
可是,如果整个 pipeline 上有多个 plugins,那么势必写成:
gulp.src 'coffee/**/*.coffee'
.pipe prefixes '# Copyright 2014 (C) Aswesome company'
.on 'error', handleError
.pipe coffee bare: true
.on 'error', handleError
.pipe gulp.dest 'js/'
这就不优雅了。
好在早有人解决了这个问题,用 [gulp-plumber](floatdrop/gulp-plumber: Fixing Node pipes),你可以写成这样:
gulp.src './src/*.coffee'
.pipe plumber()
.pipe prefixer '# Nice code here!'
.pipe coffee()
.pipe gulp.dest('./dist/')
通过为 plumber errorHandler,你可以使用自己的异常处理函数。你也可以通过 `plumber.stop`,让整个 pipeline 恢复到缺省模式。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询