2016-10-17 4 views
6

Nach dem Lesen der NoErrorsPlugin Dokumente.Webpack wann `NoErrorsPlugin` zu verwenden?

Wenn beim Kompilieren Fehler auftreten, überspringt dieses Plugin die Emissionsphase (und die Aufzeichnungsphase), so dass keine Assets ausgegeben werden, die Fehler enthalten.

Immer noch nicht verstehen. Wie man es benutzt?

Ich habe eine syntax error, aber es scheint, gibt es nichts anderes, bevor ich NoErrorsPlugin aktivieren.

Antwort

1

Ich denke, NoErrorsPlugin wird in Webpack-Build-Prozess verwendet fehlgeschlagen.

Ich habe ein Szenario, um dieses Plugin zu verwenden. Wenn das Projekt eslint/eslint-loader verwendet, schlagen ESLint-Warnungen den Build fehl. Aber das Bündel wird ausgesendet.

NoErrorsPlugin verhindert, dass Webpack etwas in ein Bündel ausgibt. Also selbst ESLint-Warnungen werden den Build fehlschlagen. Egal, welche Fehlereinstellungen für eslint-loader verwendet werden.

Referenz: https://github.com/MoOx/eslint-loader#gotchas

So können wir NoErrorsPlugin in Produktion env verwenden keinen Fehler Build zu halten.

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/14339101) – Dmitry

+0

Vielen Dank für Ihren Vorschlag! Ich habe den wesentlichen Teil der Antwort hinzugefügt. –

7

Ich las die Antwort, aber immer noch nicht verstanden. Hier ist was ich gefunden habe.

webpack.NoErrorsPlugin() ist ein optionales Plugin, das den reloader es sagt nicht neu geladen, wenn ein Fehler ist. Der Fehler wird einfach in der Konsole gedruckt und die Seite wird nicht neu geladen. Wenn Sie dieses Plugin nicht aktiviert haben und Sie einen Fehler haben, wird ein roter Bildschirm des Todes geworfen.

Kopieren von here

5

Da die webpack Dokumentation über diese spärlich bleibt, die auf den Quellcode schauen lassen, https://github.com/webpack/webpack/tree/master/lib/NoErrorsPlugin.js:

let deprecationReported = false; 
 

 
class NoErrorsPlugin { 
 
\t apply(compiler) { 
 
\t \t compiler.plugin("should-emit", (compilation) => { 
 
\t \t \t if(!deprecationReported) { 
 
\t \t \t \t compilation.warnings.push("webpack: Using NoErrorsPlugin is deprecated.\n" + 
 
\t \t \t \t \t "Use NoEmitOnErrorsPlugin instead.\n"); 
 
\t \t \t \t deprecationReported = true; 
 
\t \t \t } 
 
\t \t \t if(compilation.errors.length > 0) 
 
\t \t \t \t return false; 
 
\t \t }); 
 
\t \t compiler.plugin("compilation", (compilation) => { 
 
\t \t \t compilation.plugin("should-record",() => { 
 
\t \t \t \t if(compilation.errors.length > 0) 
 
\t \t \t \t \t return false; 
 
\t \t \t }); 
 
\t \t }); 
 
\t } 
 
} 
 

 
module.exports = NoErrorsPlugin;

Ignorieren Sie die deprecation Aspekt für jetzt . Dieser Code ist ein Webpack-Plugin wie hier dokumentiert: https://webpack.js.org/api/plugins. Es verwendet die Event-Hooks should-emit und compilation, die hier dokumentiert sind: https://webpack.js.org/api/plugins/compiler/#event-hooks. Ich konnte den should-record Haken nicht finden, aber es scheint darüber zu sein: https://webpack.js.org/api/plugins/compilation/#record-compilation-records-.

So können wir zusammenfassen: Wenn es Fehler gibt, unterdrückt das Plugin die Emission von Zielcode und das "Speichern von Informationen über die Zusammenstellung". Ich habe dies mit einer React-App verifiziert, indem ich das Plugin in der Webpack-Konfiguration umgeschaltet und den Zeitstempel des Ausgabebündels überwacht habe.

Über die Depretierung: Im selben GitHub-Verzeichnis gibt es auch eine "NoEmitOnErrorsPlugin.js", die wie "NoErrorsPlugin.js" aussieht, nur ohne Depretierung. Also, wenn wir die Code-Emission unterdrücken wollen, sollten wir das neue Plugin verwenden.