在尝试将webpack-notifier
插件添加到全新的Angular 7应用程序中时,遇到了一个非常有趣的问题。这个想法是让ng build --watch
在控制台中运行,并在当前构建失败(或从失败状态恢复回来)时发出气球通知。
TL; DR;
运行ng build --watch
时,即使构建失败,Webpack done
compiler hook的错误数组也可能为空。如果我需要errors数组来显示损坏的构建通知,是否有任何解决方法?
详细信息。
首先,我使用ng new my-app
创建了一个新的Angular项目
然后,按照here中的ngx-build-plus
说明,添加了一个自定义的webpack配置。
然后,我采取了webpack-notifier
source并将其在webpack.partial.js中用作
module.exports = {
plugins: [
new WebpackNotifierPlugin()
]
}
让我们尝试一下:ng build --watch --extra-webpack-config webpack.partial.js
好的,一切正常,让我们通过在app.component.ts中添加一些废话来破坏构建。不出所料,我可以在控制台中看到错误,并通过通知程序插件看到弹出通知。现在,我还原重大更改,等待构建变为绿色,然后再次添加重大更改。
结果是,我在控制台中收到一条错误消息,但没有弹出错误通知。
让我们更深入。 WebpackNotifierPlugin使用Webpack编译器挂钩:
WebpackNotifierPlugin.prototype.apply = function(compiler) {
if (compiler.hooks) {
var plugin = { name: 'Notifier' };
compiler.hooks.done.tap(plugin, this.compilationDone.bind(this));
} else {
compiler.plugin('done', this.compilationDone.bind(this));
}
};
WebpackNotifierPlugin.prototype.compilationDone = function(stats) {
// read the stats and show the message
}
Webpack done
hook有一个stats
参数,通知程序插件期望stats.compilation.errors
数组包含错误。但是,如果我将其记录到输出中:
WebpackNotifierPlugin.prototype.compilationDone = function(stats) {
console.log('Errors: ')
console.info(stats.compilation.errors);
};
事实证明,即使控制台中存在错误,stats.compilation.errors
也可能为空:
您对导致这种行为的原因有任何想法吗,是否有任何解决方法?
答案 0 :(得分:0)
这种行为的原因是,派生的类型检查器没有将语义错误传递给行。解决方法是将"forkTypeChecker": false
添加到构建选项(angular.json的project。[app-name] .achitect.build.options部分)
可以在Angular CLI问题跟踪器中找到更详细的描述: https://github.com/angular/angular-cli/issues/13870