我使用gulp browserify来构建和打包我的javascript库。现在有一件事情让我感到困扰:我正在运行一个简单的服务器,通过gulp进行livereload的开发。这工作正常,但是每当我的javascript包含语法错误,browserify会抛出一个错误,导致服务器停止。
我使用的browserify代码(请注意,我添加了一个错误处理程序):
browserify("./src/main.js") .bundle({standalone: "SomeName",debug: false}).on('error',notify.onError({ message: "Error: <%= error.message %>",title: "Failed running browserify" }) );
现在有趣的部分是:
当我删除独立的设置(和我的js语法错误),错误处理程序触发。但是,当我使用这个独立设置时,错误处理程序不会触发(导致gulp停止启动服务器)
解决方法
on(‘error’)事件仍然被触发。然而,浏览流与其他Gulp流有点不同。在browserify的错误处理函数中,需要显式调用this.emit(“end”)
一个例子gulp任务
var browserify = require('browserify'); var gulp = require('gulp'); var source = require("vinyl-source-stream"); var reactify = require('reactify'); gulp.task('browserify',function(){ // create new bundle var b = browserify(); // add transform if you want b.transform(reactify); // add file to browserify b.add("./src/main.js"); // start bundling return b.bundle() .on('error',function(err){ // print the error (can replace with gulp-util) console.log(err.message); // end this stream this.emit('end'); }) .pipe(source('main.js')) // pipe other plugin here if you want .pipe(gulp.dest('./dist')); });
错误函数处理程序阻止gulp崩溃,this.emit(“end”)停止当前流,不让它运行到下一个管道。事件处理程序也可以捕获变形插件中的错误。
欲了解更多信息,您可以在这里阅读http://truongtx.me/2014/07/15/handle-errors-while-using-gulp-watch/