У меня возникла довольно интересная проблема, когда я пытался добавить плагин webpack-notifier
в совершенно новое приложение Angular 7. Идея состояла в том, чтобы ng build --watch
работал в консоли и имел всплывающие уведомления, если текущая сборка не удалась (или восстановлена из состояния сбоя).
TL; DR;
При запуске ng build --watch
массив ошибок для веб-пакета done
ловушка компилятора может быть пустым, даже если сборка не удалась. Есть ли обходной путь для этого, если мне нужен массив ошибок, чтобы показать уведомление о сломанной сборке?
Теперь подробности.
Сначала я создал новый проект Angular, используя ng new my-app
Затем я добавил пользовательскую конфигурацию веб-пакета, следуя инструкциям ngx-build-plus
из здесь .
Затем я взял 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
может быть пустым, даже если в консоли есть ошибки:

Есть ли у вас какие-либо идеи о причине такого поведения и есть ли обходной путь?