我正在使用Gulp发现React JSX(是的,我知道)。
我有这个Gulp任务:
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对于流不起作用,因为它们是异步的,所以附加错误处理程序的最佳方法是什么,以便我的gulp进程在遇到JSX转换错误时不会出现问题:
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)
我遇到的问题是实时发生的转换错误会导致我的开发服务器崩溃(因为我的开发服务器是我的吞吐过程),而这些转换错误正在影响我的吞噬过程。
答案 0 :(得分:2)
然后将其用作
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'));
}
我在我的Browserify
进程中使用它来捕获任何捆绑错误并显示它们而不会杀死我的Watchify
实例。对于使用React进行转换,应该这样做。