Webpack, когда нужно использовать "NoErrorsPlugin"?
После ознакомления с документами NoErrorsPlugin
.
Когда возникают ошибки при компиляции, этот плагин пропускает фазу испускания (и фазу записи), поэтому нет испускаемых активов, которые включают ошибки.
Все еще не понимаю. Как это использовать?
Я сделал syntax error
, но кажется, что нет ничего другого, кроме как включить NoErrorsPlugin
.
Ответы
Ответ 1
Я читал ответ, но все равно не понимаю. Вот что я нашел.
webpack.NoErrorsPlugin() - необязательный плагин, который сообщает перезагрузке, чтобы он не перезагружался, если есть ошибка. Ошибка просто печатается на консоли, и страница не перезагружается. Если у вас нет этого плагина, и у вас есть ошибка, выдается красный экран смерти.
Скопировать сюда
Ответ 2
Поскольку документация по webpack по этому вопросу остается разреженной, давайте рассмотрим исходный код https://github.com/webpack/webpack/tree/master/lib/NoErrorsPlugin.js:
let deprecationReported = false;
class NoErrorsPlugin {
apply(compiler) {
compiler.plugin("should-emit", (compilation) => {
if(!deprecationReported) {
compilation.warnings.push("webpack: Using NoErrorsPlugin is deprecated.\n" +
"Use NoEmitOnErrorsPlugin instead.\n");
deprecationReported = true;
}
if(compilation.errors.length > 0)
return false;
});
compiler.plugin("compilation", (compilation) => {
compilation.plugin("should-record", () => {
if(compilation.errors.length > 0)
return false;
});
});
}
}
module.exports = NoErrorsPlugin;
Ответ 3
Как указано, NoErrorsPlugin (теперь переименованный в NoEmitOnErrorsPlugin) не выделяет никаких активов в папку сборки, когда во время компиляции были ошибки.
Ответ от @Carsten Führmann действительно хорош, но поскольку OP спрашивал, когда использовать этот плагин, я хотел бы добавить, что наиболее распространенными вариантами использования для этого плагина были два:
- Избегайте испускать активы приложения при компиляции в режиме производства.
Что касается этого первого варианта использования (сборки производства), то из Webpack 4 он больше не нужен, поскольку он включен по умолчанию при запуске Webpack в режиме производства. (https://github.com/webpack/webpack/releases?after=v4.0.1)
- Использование функции замены горячего модуля
Если вы следуете последней базовой конфигурации (https://webpack.js.org/guides/hot-module-replacement/), вы обнаружите, что это не является строго необходимым, но для некоторых других настроек HMR (https://www. npmjs.com/package/webpack-hot-middleware) этот плагин очень полезен, так как он предотвратит передачу какого-либо актива (и, следовательно, любых обновлений) в браузер, если код не компилируется.
Ответ 4
Я думаю, что NoErrorsPlugin
используется в процессе сборки webpack.
У меня есть один сценарий использования этого плагина. Если в проекте используется eslint/eslint-loader, предупреждения ESLint выйдут из строя. Но пучок будет выпущен.
NoErrorsPlugin не позволяет Webpack выводить что-либо в пакет. Поэтому даже предупреждения ESLint не смогут выполнить сборку. Независимо от того, какие параметры ошибок используются для eslint-loader.
Ссылка: https://github.com/MoOx/eslint-loader#gotchas
Поэтому мы можем использовать NoErrorsPlugin в производстве env, чтобы не создавать ошибок.
Ответ 5
Чтобы ответить, когда мы должны ответить, почему. В этой статье "Средний" кратко излагается, почему довольно хорошо. Обратите внимание, что NoErrorsPlugin
(v1), NoEmitOnErrorsPlugin
(v2, v3) и optimization.noEmitOnErrors
(v4) - все проявления одной и той же функции. В статье обсуждается v4, но почему так и остается.
Почему бы не использовать NoErrorsPlugin
: рабочие части приложения не могут использоваться, если какая-либо часть имеет ошибку. В разработке может быть утомительно исправить беспорядочную часть B, если вам просто нужно быстро проверить новый код части A. Представьте, что вы строите автомобиль, и вы хотите попробовать, как гладко открывается багажник, но вы не можете, потому что орнамент капота кота не является на месте.
Зачем использовать NoErrorsPlugin
: никаких сломанных пакетов. В производстве вы, вероятно, хотите, чтобы все части приложения находились в рабочем состоянии, потому что задействованы реальные риски. Ошибка в любом месте приложения может поставить под угрозу работу и безопасность других частей. Поэтому мы не хотим публиковать эти другие, возможно, функционирующие части. Мы хотим продолжать обслуживать старую, но стабильную версию в целом. Если в сборке возникает ошибка, мы не хотим, чтобы она каким-либо образом влияла на стабильную версию. Вот почему использовать NoErrorsPlugin
.