Angular CLI构建-显示构建状态通知

时间:2019-03-07 13:43:33

标签: angular webpack angular-cli

在尝试将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也可能为空:

enter image description here

您对导致这种行为的原因有任何想法吗,是否有任何解决方法?

1 个答案:

答案 0 :(得分:0)

这种行为的原因是,派生的类型检查器没有将语义错误传递给行。解决方法是将"forkTypeChecker": false添加到构建选项(angular.json的project。[app-name] .achitect.build.options部分)

可以在Angular CLI问题跟踪器中找到更详细的描述: https://github.com/angular/angular-cli/issues/13870