5

我正在使用browserify,所以我可以在我的前端代码中使用 npm 模块,并gulp来完成我的构建任务。这工作正常:

var browserify = require('gulp-browserify');

gulp.task('js', ['clean'], function() {
    gulp
        .src('./public/js/src/index.js')
        .pipe(browserify({
            insertGlobals : true,
            debug : ! gulp.env.production
        }))
        .pipe(gulp.dest('./public/js/dist'))
});

但是,如果我的 JS 中有语法错误,我希望通过 OS X 通知收到错误通知。我已经看到了这个类似的问题,并修改了我的代码以在.on('error'...)后面添加一个.browserify()

// Browserify/bundle the JS.
gulp
    .src('./public/js/src/index.js')
    .pipe(browserify({
        insertGlobals : true,
        debug : ! gulp.env.production
    }).on('error', function(err){
        notify.onError({
            message: "Error: <%= error.message %>",
            title: "Failed running browserify"
        }
        this.emit('end');
    })
    .pipe(gulp.dest('./public/js/dist'))

但是,当我的 JS 损坏时,这不会通知。在里面添加一个 console.log()on('error',...)也不会记录。我怀疑是因为这个问题不涉及使用 gulp 管道。

如何在管道到 gulp browserify 时收到错误通知?

4

3 回答 3

6

使用gulp-notify。另请注意,您应该使用browserify模块而不是已弃用的 gulp-browerify模块。

var browserify = require('browserify'),
    brfs = require('brfs'),
    watchify = require('watchify'),
    notify = require("gulp-notify");


var bundler = watchify(browserify({
    basedir: "./public/js/src"
}));


// Browserify our code
gulp.task('js', ['clean'], function() {
    // Browserify/bundle the JS.
    return bundler.bundle()
        // log errors if they happen
        .on('error', function(err) {
            return notify().write(err);
        })
        .pipe(source('index.js'))
        .pipe(gulp.dest('public/js/dist'));
});

这里示例如何在任务中使用browserifyutil 。gulp

是另一个示例,当 js 出现语法错误时,如何使用browserify和显示通知。

于 2015-01-21T16:15:42.637 回答
3

在我的 gulpfile 中,我只监听未捕获的异常并使用node-notifier 进行通知

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

process.on('uncaughtException', function(err) {
  notifier.notify({title: 'error', message: 'gulp process has crashed'});

  setTimeout(function() {
    console.error(err);
    process.exit(1);
  }, 1000);
});

我发现setTimeout在退出流程之前显示通知需要延迟。

于 2015-01-20T19:44:36.470 回答
0

我使用 gulp-plumber 来捕获所有错误:

gulp.task('browserify', function(){
    return browserify('./assets/js/src/app.js')
            .pipe(plugins.plumber())
            .pipe(gulp.dest('./assets/js'))
            .pipe(plugins.notify({message: "browserify complete"}))
});

https://www.npmjs.com/package/gulp-plumber

您可能还必须使用 gulp-streamify。我不认为 browserify 支持开箱即用的流。自从我尝试使用 gulp 进行浏览器化以来已经有一段时间了,所以我不确定我的代码片段是否可以开箱即用,对此感到抱歉。

https://github.com/nfroidure/gulp-streamify

于 2015-01-21T09:01:15.717 回答