抱歉所有的例子都 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 恢复到缺省模式。