Wie konfiguriert man Webpack 4, um Brocken aus der Liste der Einstiegspunkte zu verhindern, die in einem anderen Paket erscheinen?

15

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.

    
Joe Lencioni 08.03.2018, 00:51
quelle

3 Antworten

2

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%     
Joe Lencioni 14.03.2018, 15:45
quelle
2

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:

%Vor%

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:

%Vor%

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

    
Carloluis 11.03.2018 21:28
quelle
1
  

Unser Ziel ist es, webpack so zu konfigurieren, dass wir alle unsere Assets so aufbauen können   Chunks, die in einem dieser Bundles angezeigt werden, werden in keinem von ihnen angezeigt   anderes Bündel.

Was ich vorher hatte:

%Vor%

Wie es jetzt funktioniert:

%Vor%     
MyTitle 11.03.2018 21:24
quelle

Tags und Links