Webpack何时使用`NoErrorsPlugin`?

sli*_*wp2 12 webpack

阅读完NoErrorsPlugin文档后.

当编译此插件时出现错误时会跳过发射阶段(和记录阶段),因此没有发出包含错误的资产.

不过,不明白.如何使用它?

我做了一个syntax error,但似乎在我启用之前没有什么不同NoErrorsPlugin.

ken*_*ter 13

我正在读答案,但仍然没有得到答案.这是我发现的.

webpack.NoErrorsPlugin()是一个可选插件,告诉重新加载器在出现错误时不重新加载.该错误只是在控制台中打印,页面不会重新加载.如果您没有启用此插件并且出现错误,则会抛出红色的死亡屏幕.

这里复制


Car*_*ann 12

由于关于此的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;
Run Code Online (Sandbox Code Playgroud)

暂时忽略弃用方面.此代码是一个webpack插件,如下所示:https://webpack.js.org/api/plugins .它使用事件挂钩should-emitcompilation,这是记录在这里:https://webpack.js.org/api/plugins/compiler/#event-hooks.我找不到should-record钩子,但它似乎是关于这个:https://webpack.js.org/api/plugins/compilation/#record-compilation-records-.

所以我们可以总结一下:如果有错误,插件会抑制目标代码的发送,以及"存储有关编译的信息".我通过React应用程序验证了这一点,通过切换webpack配置中的插件并监视输出包的时间戳.

关于弃用:在同一个GitHub目录中,还有一个"NoEmitOnErrorsPlugin.js",它看起来像"NoErrorsPlugin.js",只是没有弃用.因此,如果我们想要抑制代码发射,我们应该使用新的插件.


Roc*_*que 5

如前所述,当编译期间出现错误时, NoErrorsPlugin(现已重命名为NoEmitOnErrorsPlugin不会向构建文件夹发出任何资源

\n\n

@Carsten F\xc3\xbchrmann 的答案非常好,但由于 OP 询问何时使用此插件,我想补充一点,此插件最常见的用例有两个:

\n\n
    \n
  1. 在生产模式下编译时避免发出应用程序的资产。
  2. \n
\n\n

关于第一个用例(生产构建),从 Webpack 4 开始不再需要它,因为在生产模式下运行 Webpack 时默认启用它。(https://github.com/webpack/webpack/releases?after=v4.0.1

\n\n
    \n
  1. 使用热模块更换功能
  2. \n
\n\n

如果您遵循最新的基本配置(https://webpack.js.org/guides/hot-module-replacement/),您会发现这并不是严格需要的,但对于其他一些 HMR 设置(https://www. npmjs.com/package/webpack-hot-middleware)这个插件非常有用,因为它可以防止在代码未编译的情况下向浏览器发出任何资产(以及任何更新)。

\n