Posted at

gulpタスク実行中にエラーが出たらデスクトップ通知を出す

More than 5 years have passed since last update.

watchしながら作業してるときにコンパイルエラーなんかが起こってたときに、ターミナルにエラーメッセージが出てるけど気づけないときがあったので通知を導入した。


gulp-notifyを使う

エラーが出たときにgulpを終了させないgulp-plumberと、通知を出すgulp-notifyを使う。

gulp-plumberはタスク実行中にerrorイベントが発生したときに実行するerrorHandlerを指定することができる。errorHandlerにnotifyを指定すれば通知を出せる。


gulpfile

CoffeeScriptのコンパイルを例に。

var gulp = require('gulp');

var plumber = require('gulp-plumber');
var notify = require('gulp-notify');
var coffee = require('gulp-coffee');

gulp.task('coffee', function() {
return gulp.src('src/coffee/**/*.coffee')
.pipe(plumber({errorHandler: notify.onError('<%= error.message %>')})
.pipe(coffee())
.pipe(gulp.dest('app/assets/js');
});

plumber()を挟むときに一緒に{errorHandler: notify.onError('<%= error.message %>')}を引数にしておく。


エラーが出ると通知

watchしつつ上記タスクが実行されたときにコンパイルエラーが出ると通知が出る。

2014-08-13 06_50_51.gif

簡単便利。



node-notifierを使う

node-notifierを使う。こっちはerrorじゃないときでも好きなとこで通知を出せる。


gulpfile

var gulp = require('gulp');

var plumber = require('gulp-plumber');
var coffee = require('gulp-coffee');
var Notifier = require('node-notifier');
var notifier = new Notifier();

var errorHandler = function(error) {
notifier.notify({
message: error.message,
title: error.plugin,
sound: 'Glass'
});
};

gulp.task('coffee', function() {
return gulp.src('src/coffee/**/*.coffee')
.pipe(plumber({errorHandler: errorHandler)})
.pipe(coffee())
.pipe(gulp.dest('app/assets/js');
});

タスク実行してエラーが出ると チーン♪ という音とともに通知が出る。soundに指定出来る音は

ls /System/Library/Sounds

で出てくるファイル名が指定できる。指定できるオプションは他にも色々あってnode-notifierのページで確認できる。


notifier.notify({

"title": "Phil Coulson",

"subtitle": "Agent of S.H.I.E.L.D.",

"message": "If I come out, will you shoot me? 'Cause then I won't come out.",

"sound": "Funk", // case sensitive

"contentImage": _dirname + "/coulson.jpg",

"appIcon": __dirname + "/coulson.jpg",

"open": "file://" + _
dirname + "/coulson.jpg"

});


node-notifierの場合はエラーハンドリングに限らず、タスクが終わったときに通知出したり色々とカスタマイズできる。