我正在尝试编写一个挂钩到各种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在控制台上报告错误,但永远不会调用钩子。每个其他钩子但是失败模块按预期调用。如何在构建过程中捕获错误?
答案 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。