1. ホーム
  2. node.js

[解決済み] エラーによるgulp watchの破壊/クラッシュを防止する

2022-04-20 01:23:53

質問

gulp 3.6.2を使用しており、オンラインサンプルからセットアップされた以下のタスクがあります。

gulp.task('watch', ['default'], function () {
  gulp.watch([
    'views/**/*.html',        
    'public/**/*.js',
    'public/**/*.css'        
  ], function (event) {
    return gulp.src(event.path)
      .pipe(refresh(lrserver));
  });

  gulp.watch(['./app/**/*.coffee'],['scripts']);
  gulp.watch('./app/**/*.scss',['scss']);
});

CoffeeScriptのgulp watchでエラーが発生すると、常に停止してしまいます - 明らかに私が望むものではありません。

他の場所で推奨されているように、私はこれを試してみました。

gulp.watch(['./app/**/*.coffee'],['scripts']).on('error', swallowError);
gulp.watch('./app/**/*.scss',['scss']).on('error', swallowError);
function swallowError (error) { error.end(); }

が、うまくいかないようです。

何が間違っているのでしょうか?


Aperçuさんの回答を受けて、私は自分の swallowError メソッドで、代わりに以下を試してみました。

gulp.task('scripts', function () {
  gulp.src('./app/script/*.coffee')
    .pipe(coffee({ bare: true }))
    .pipe(gulp.dest('./public/js'))
    .on('error', swallowError);
});

再起動し、コーヒーファイルにシンタックスエラーを発生させました。同じ問題が発生しました。

[gulp] Finished 'scripts' after 306 μs

stream.js:94
      throw er; // Unhandled stream error in pipe.
            ^
Error: W:\bariokart\app\script\trishell.coffee:5:1: error: unexpected *
*
^
  at Stream.modifyFile (W:\bariokart\node_modules\gulp-coffee\index.js:37:33)
  at Stream.stream.write (W:\bariokart\node_modules\gulp-coffee\node_modules\event-stream\node_modules\through\index.js:26:11)
  at Stream.ondata (stream.js:51:26)
  at Stream.EventEmitter.emit (events.js:95:17)
  at queueData (W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\node_modules\map-stream\index.js:43:21)
  at next (W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\node_modules\map-stream\index.js:71:7)
  at W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\node_modules\map-stream\index.js:85:7
  at W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\lib\src\bufferFile.js:8:5
  at fs.js:266:14
  at W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\node_modules\graceful-fs\graceful-fs.js:104:5
  at Object.oncomplete (fs.js:107:15)

解決方法は?

あなたの swallowError 関数は次のようになります。

function swallowError (error) {

  // If you want details of the error in the console
  console.log(error.toString())

  this.emit('end')
}

この関数を error イベントではなく、落ちてきたタスクの watch タスクで失敗した場合、このエラーコールバックを各タスクに設定する必要があります。 ; などを防ぐために watch タスクを停止させることができます。

例:

gulp.task('all', function () {
  gulp.src('./app/script/*.coffee')
    .pipe(coffee({ bare: true }))
    .on('error', swallowError)
    .pipe(gulp.dest('./public/js'))

  gulp.src('css/*.scss')
    .pipe(sass({ compass: true }))
    .on('error', swallowError)
    .pipe(cssmin())
    .pipe(gulp.dest('dist'))
})

また、別のモジュールをインクルードしても構わない場合は ログ の関数です。 ガルプユーティル で余分な関数を宣言しないようにするためです。 gulpfile :

.on('error', gutil.log)


しかし、私は素晴らしい見ていることをお勧めかもしれません。 ガルププランバー プラグインを使用しており、このプラグインは onerror ハンドラの error イベントを発生させ、ストリームの切断を引き起こします。使い方はとても簡単で、失敗する可能性のあるタスクをすべて捕捉することを防いでくれます。

gulp.src('./app/script/*.coffee')
  .pipe(plumber())
  .pipe(coffee({ bare: true }))
  .pipe(gulp.dest('./public/js'))

詳細はこちら この記事 当該プラグインの作者によるものです。