Ich arbeite an einem großen Projekt und versuche, Webpack 3 zu landen - & gt; 4 Aktualisierung. Diese App hat ungefähr 1.000 Einstiegspunkte, von denen etwa 10 als "global" oder "core" gelten und auf jeder Seite garantiert sind. Diese Core-Pakete enthalten eine Mischung aus hersteller- und herstellerunabhängigem Code. Ich muss Webpack so konfigurieren, dass alle diese Assets erstellt werden, sodass alle in einem dieser Bundles enthaltenen Chunks unabhängig von der Größe des Chunks nicht in einem anderen Bundle angezeigt werden, ohne neue Assets zu erstellen, die zur Seite hinzugefügt werden müssen / p>
Mit webpack 3 verwenden wir CommonsChunkPlugin, um dies zu erreichen. Hier ist ein einfaches Beispiel:
%Vor%Nun, mit webpack 4 und dem Entfernen von CommonsChunkPlugin, ist mir nicht klar, wie ich diese Art von Optimierung erreichen soll.
Ich würde gerne in der Lage sein, webpack eine Liste von Einstiegspunkten zu geben, und alle Teile, die in diesen erscheinen, erscheinen in keinem anderen Paket, aber ich bin mir nicht sicher, wie ich das machen soll. Ich habe einige anstehende Dokumentation zu splitChunks
durchgelesen, aber das war ich nicht in der Lage, eine Lösung zusammenzusetzen.
Ich habe ein kleines Repo als Ausgangspunkt zum Basteln eingerichtet: Ссылка
Eine interessante Richtung, die ich ausprobiere, ist die Konfiguration von cacheGroups
mit einer Gruppe für jeden dieser Einstiegspunkte und die Implementierung der Option test
mit einer Funktion, die diese Prüfung durchführt. Die Dokumentation ist jedoch ziemlich spärlich, daher bin ich mir nicht sicher, was der richtige Weg wäre, um diese Testfunktion zu schreiben, oder ob das überhaupt funktionieren wird.
Ok, ich denke, ich habe herausgefunden, wie das geht. Aber zuerst, so sieht der Build mit der standardmäßigen splitChunks-Konfiguration aus (Hinweis: FOO.bundle.js ist ein asynchrones Paket, das durch einen dynamischen Import erstellt wurde):
%Vor%Wenn das Ziel darin besteht, dass Module, die in core, coreB und c angezeigt werden, in keinem anderen Paket erscheinen, kann dies mit der folgenden Konfiguration erfolgen:
%Vor%erzeugt die folgende Ausgabe:
%Vor% Ihre aktuelle Konfiguration (mit Webpack 3) verwendet CommonsChunkPlugin
für einen expliziten Anbieter Klumpen :
Teilen Sie Ihren Code in Anbieter und Anwendung.
Überprüfen der Webpack-Ausgabe für Ihr Repo Ich fand, dass a.bundle.js
den folgenden Code enthält:
Der gleiche Code ist in b.bundle.js
(der Unterschied in diesem Skript ist der letzte console.log
, auf den von non-core-module-b.js
: console.log('non-core module b');
verwiesen wird).
Aktualisieren der webpack.config.js
-Optimierungsoption auf:
Erzeuge einen Nichtduplizierungscode zwischen den Bündeln.
Sie können den Arbeitscode hier überprüfen. Ich habe auch eine Pull-Anforderung für dein Beispielprojekt erstellt.
Weitere Informationen über Code-Splitting und die splitChunks-Optimierung