2016-03-22 5 views
1

Gulpを使用してReact JSXをトランスリングしています(私は知っています)。ストリーミングライブラリからエラーがスローされたときにGulp.jsのビニールストリームエラーを正しく処理する

私はこのガルプタスクいる:

gulp.task('transpile-jsx', function() { 
    return transpileJSX().on('error',function(err){ // < I just added this error handler, but it doesn't do much 
     console.error(err); 
    }); 
}); 

上記のタスクはそうのように呼び出されます。

gulp.task('metagen:all', ['transpile-jsx'], function (done) { 

    runAllMetagens(done); 

}); 

と仕事をして、実際の関数は次のようになります。

function transpileJSX() { 
    return gulp.src('./public/static/app/js/views/**/*.js').pipe(react({harmony: true})) 
     .pipe(gulp.dest('./public/static/app/js/jsx')); 
} 

ストリームが非同期であるためにtry/catchが機能しないので、エラーハンドラをアタッチする最も良い方法は何ですか?

events.js:141 
     throw er; // Unhandled 'error' event 
    ^
Error: Parse Error: Line 94: Unexpected token > 
    at throwError (/Users/amills001c/WebstormProjects/baymax/AdminUI/node_modules/gulp-react/node_modules/react-tools/node_modules/jstransform/node_modules/esprima-fb/esprima.js:2808:21) 
    at throwUnexpected (/Users/amills001c/WebstormProjects/baymax/AdminUI/node_modules/gulp-react/node_modules/react-tools/node_modules/jstransform/node_modules/esprima-fb/esprima.js:2870:9) 
    at parseJSXChild (/Users/amills001c/WebstormProjects/baymax/AdminUI/node_modules/gulp-react/node_modules/react-tools/node_modules/jstransform/node_modules/esprima-fb/esprima.js:7068:13) 
    at parseJSXElement (/Users/amills001c/WebstormProjects/baymax/AdminUI/node_modules/gulp-react/node_modules/react-tools/node_modules/jstransform/node_modules/esprima-fb/esprima.js:7140:31) 
    at parsePrimaryExpression (/Users/amills001c/WebstormProjects/baymax/AdminUI/node_modules/gulp-react/node_modules/react-tools/node_modules/jstransform/node_modules/esprima-fb/esprima.js:3572:20) 
    at parseLeftHandSideExpressionAllowCall (/Users/amills001c/WebstormProjects/baymax/AdminUI/node_modules/gulp-react/node_modules/react-tools/node_modules/jstransform/node_modules/esprima-fb/esprima.js:3656:61) 
    at parsePostfixExpression (/Users/amills001c/WebstormProjects/baymax/AdminUI/node_modules/gulp-react/node_modules/react-tools/node_modules/jstransform/node_modules/esprima-fb/esprima.js:3696:20) 
    at parseUnaryExpression (/Users/amills001c/WebstormProjects/baymax/AdminUI/node_modules/gulp-react/node_modules/react-tools/node_modules/jstransform/node_modules/esprima-fb/esprima.js:3763:16) 
    at parseBinaryExpression (/Users/amills001c/WebstormProjects/baymax/AdminUI/node_modules/gulp-react/node_modules/react-tools/node_modules/jstransform/node_modules/esprima-fb/esprima.js:3853:16) 
    at parseConditionalExpression (/Users/amills001c/WebstormProjects/baymax/AdminUI/node_modules/gulp-react/node_modules/react-tools/node_modules/jstransform/node_modules/esprima-fb/esprima.js:3913:16) 

私が午前問題はリアルタイムで起こるtranspilationエラーが原因で、私のdevのサーバー(、私のdevのサーバーをクラッシュされているということです。私の一気プロセスでタンクが、それはそうのようなJSXのtranspilationエラーに当たるとしません私のギャルププロセスです)、これらの蒸散エラーは私のギャルププロセスをクラッシュさせています。

答えて

2

使用gulp-util

それからちょうど私がどのバンドルエラーをキャプチャし、私のWatchifyインスタンスを殺すことなく、それらを表示するために私のBrowserifyプロセスでこれを使用

var gutil = require('gulp-util'); 

function transpileJSX() { 
    return gulp.src('./public/static/app/js/views/**/*.js') 
     .pipe(react({harmony: true})) 
     .on('error', gutil.log) // Add gutil.log for error handling/logging 
     .pipe(gulp.dest('./public/static/app/js/jsx')); 
} 

として使用します。 Reactであなたの蒸散のために同じことをしなければならない。

+0

まあ、 'エラー'ハンドラーで動作しているようです。 –

+0

これは私の人生を保存しました:) –

関連する問題