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 спрашивал, когда использовать этот плагин, я хотел бы добавить, что наиболее распространенными вариантами использования для этого плагина были два:

  1. Избегайте испускать активы приложения при компиляции в режиме производства.

Что касается этого первого варианта использования (сборки производства), то из Webpack 4 он больше не нужен, поскольку он включен по умолчанию при запуске Webpack в режиме производства. (https://github.com/webpack/webpack/releases?after=v4.0.1)

  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.