Webpack插件:在构建过程中捕获错误

时间:2015-05-15 19:22:21

标签: webpack

我正在尝试编写一个挂钩到各种webpack事件的插件。我无法将插件挂钩到failed-module事件中。 build-module和success-module工作正常。

基本上我想捕获构建过程中发生的任何错误,并将它们报告给某些外部事物。 (我正在编写一个插件,当webpack编译过程开始,结束或引发错误时,会向外部进程发出一些信号)。

Plugin.prototype.apply = function(compiler) {
    var self = this;

    compiler.plugin('compilation', function(compilation, callback) {

      compilation.plugin('build-module', function(){
        self.shout('build module');
      });

      compilation.plugin('succeed-module', function(){
        self.shout('succeed module');
      });

      compilation.plugin('failed-module', function(){
        self.shout('failed module');
      });
    });

    compiler.plugin('compile', function(compiler, callback) {
      self.shout('started');
    });

    compiler.plugin('emit', function(compiler, callback) {
      self.shout('done');
      callback();
    });
};

除了失败的模块挂钩之外的所有工作。为了测试,我在我的一个js文件中添加了语法或导入错误。 webpack在控制台上报告错误,但永远不会调用钩子。每个其他钩子但是失败模块按预期调用。如何在构建过程中捕获错误?

1 个答案:

答案 0 :(得分:0)

我认为您的语法错误实际上并不会导致模块失败。这个带有jsx模块的简单测试表明,webpack模块构建过程忽略了一个简单的语法错误(使用babel),但是当jsx没有被转换时不能忽略问题。

var React = require('react');

//here's the syntax error
asdf

var FrontPage = React.createClass({
    displayName: 'FrontPage',
    render: function() {
        return (
            <div className="FrontPage">
            </div>
        );
    }
});
module.exports = FrontPage;

将插件与jsx模块一起使用,这是吸收错误的配置:

module: {
    loaders: [{
        test: /\.jsx$/,
        loaders: ['babel']
    }]
}

no errors

这是触发失败模块的配置

module: {
    loaders: [{
        test: /\.jsxz$/,
        loaders: ['babel']
    }]
}

ModuleParseError: Module parse failed: ...

老实说,我不确定为什么它不会因简单的语法错误而失败,也许是通过设计?我会将一个问题发布到webpack repo