2014/02/14

gulpfile.coffeeでwatchするときは最後にreturnしましょう

gulpでwatchしたときにウォッチ中のタスクでコンパイルエラーになってしまうと、それ以後にウォッチされなくなるので困っていましたが、とりあえず対処法がわかったのでメモしておきます。

GitHubにIssueが上がっていました。

CoffeeScriptだと関数の最後の式に自動でreturnを暗黙で付けてしまうのが原因です。なので、gulpfile.coffeeな人だけが発生する問題です。

対処方法としては、次のように、最後に明示的なreturnを足してやればよいです。

gulp.task 'stylus', ->
  gulp.src '**/*.styl'
    .pipe (stylus {bare: true}) .on 'error', log
    .pipe cond isRelease, minifyCss()
    .pipe (gulp.dest 'css')
    .pipe (livereload server)
  return

returnがない場合はパイプされたストリーム経由でエラーが返されてしまうっぽいです (まだソースをあまり見ていないので半分くらい想像です)。

gulp-utilのlogではなく自作log関数をつくったほうがよさげ

また、エラー時にgulp-utilのlogを使っていましたが、エラー報告が見づらいことに気づきました。 gulpプラグインのエラーはnamemessageがあることが多いので、自分でログ関数を作りました。

log = (err) ->
    if err.name? and err.message
        #console.log chalk.white.bgRed.bold '[ERROR] ' + err.name
        console.log '[ERROR]', err.name
        console.log err.message
    else if typeof err == 'object'
        for k, v of err
            console.log k, v
    else
        console.log err.toString()

そのときの出力例はこんな感じ。chalkを入れて色をつけるとちょっと見やすくなりました。

関連リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。