1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TypeScriptやSassやEJSのビルドエラー時にGulpのタスクが終了しないようにする方法

Last updated at Posted at 2016-11-25

前回前々回の上記記事で構築した環境でAngularの開発を行っていると、ビルドエラーが発生しただけでgulpのタスクが停止してしまうことに気づきました。
ビルドエラーが発生しても、コンソールにエラー表示がされるだけでタスクは停止しないように対応したいと思います。

※執筆時点で過去記事のgulpfile.jsは対応版に修正済

今回やりたいこと

  1. TypeScriptのビルドエラーが発生してもGulpのタスクが停止しないようにする
  2. Sassのビルドエラーが発生してもGulpのタスクが停止しないようにする
  3. EJSのビルドエラーが発生しても(以下略

コーディング開始

Sassの場合

めちゃくちゃ簡単です。

.on('error', sass.logError)

上記をsassのタスクに追加するだけでOK。以下が例となります。

gulpfile.js
gulp.task('sass', function () {
  var processors = [cssnext()];
  return gulp.src(conf.gulp.srcDir + '/**/*.sass', {base: conf.gulp.srcDir})
    .pipe(sass().on('error', sass.logError))  //この行を追加するのみ!
    .pipe(postcss(processors))
    .pipe(minifycss())
    .pipe(gulp.dest(conf.gulp.srcDir))
});

TypeScript、EJSの場合

gulp-plumberを利用します。

コンソールで実行
npm i gulp-plumber --save-dev

下記をTypeScriptやEJSのタスクに追加すればOK。

.pipe(plumber())

前回の記事で利用したgulpfile.jsでタスクの記述例を示します。

gulpfile.js
var plumber = require('gulp-plumber'); //gulp-plumberを読み込み *****************
省略

gulp.task('local-ejs', function () {
  return gulp.src(conf.gulp.srcDir + '/**/*.ejs')
    .pipe(plumber())  //この行を追加するのみ!****************************
    .pipe(ejs({type: "local"}, {"ext": ".html"}))
    .pipe(gulp.dest(conf.gulp.localDir));
});


gulp.task('local-ts', function () {
  var tsResult = gulp.src(conf.gulp.srcDir + '/**/*.ts', {base: conf.gulp.srcDir})
    .pipe(sourcemaps.init())
    .pipe(plumber()) //この行を追加するのみ!****************************
    .pipe(typescript(conf.ts.compilerOptions));
  tsResult.dts.pipe(gulp.dest(conf.gulp.localDir));

  return tsResult.js.pipe(sourcemaps.write("./"))
    .pipe(gulp.dest(conf.gulp.localDir));
});

以上です。

実行

コンソールから実行
gulp local

TypeScriptでのビルドエラー

問題なくタスクが継続します。

TypeScriptでのビルドエラー
[01:34:54] Starting 'local-ts'...
src\app\app.module.ts(8,19): error TS2304: Cannot find name 'MyApp2'.
[01:34:57] TypeScript: 1 semantic error
[01:34:57] TypeScript: emit succeeded (with errors)
[01:34:57] Finished 'local-ts' after 3.3 s

Sassでのビルドエラー

問題なくタスクが継続します。

Sassでのビルドエラー
[01:37:12] Starting 'sass'...
Error in plugin 'sass'
Message:
    src\css\common.sass
Error: Undefined variable: "$flex".
        on line 8 of src/css/common.sass
>>     display: $flex;
   -------------^

[01:37:12] Finished 'sass' after 23 ms

EJSでのビルドエラー

問題なくタスクが継続します。

EJSでのビルドエラー
[01:33:20] Starting 'local-ejs'...
[01:33:20] Plumber found unhandled error:
 Error in plugin 'gulp-ejs'
Message:
    ReferenceError: C:\works\eclipse\workspace\hello-taskqueue\angular\src\index.ejs:7
    5|     <meta name="viewport" content="width=device-width, initial-scale=1">
    6|
 >> 7|     <% if (atype == 'local') { %>
    8|       <script src="/node_modules/systemjs/dist/system.src.js"></script>
    9|       <script src="/systemjs.config.js"></script>
    10|       <script>

atype is not defined
[01:33:20] Finished 'local-ejs' after 30 ms

以上です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?