Welche Tools können Sie verwenden, um das webpack-Bundle im Blick zu behalten und zu analysieren?
Auch wenn Sie webpack so konfigurieren, dass die App so klein wie möglich ist, ist es wichtig, sie im Auge zu behalten und zu wissen, was sie enthält. Andernfalls können Sie eine Abhängigkeit installieren, durch die die App doppelt so groß wird und gar nicht bemerkt wird.
In diesem Abschnitt werden Tools beschrieben, mit denen Sie Ihr Paket besser verstehen können.
Größe des Bundles im Blick behalten
Verwenden Sie zum Überwachen der Anwendungsgröße während der Entwicklung webpack-dashboard und bundlesize auf CI.
Webpack-Dashboard
webpack-dashboard ergänzt die webpack-Ausgabe um die Größe von Abhängigkeiten, den Fortschritt und andere Details. Das Ganze sieht dann so aus:
Dieses Dashboard hilft Ihnen, große Abhängigkeiten im Blick zu behalten. Wenn Sie eine hinzufügen, wird sie sofort im Bereich Module angezeigt.
Installieren Sie das Paket webpack-dashboard, um die Funktion zu aktivieren:
npm install webpack-dashboard --save-dev
Fügen Sie das Plug-in dem Abschnitt plugins der Konfiguration hinzu:
// webpack.config.js
const DashboardPlugin = require('webpack-dashboard/plugin');
module.exports = {
plugins: [
new DashboardPlugin(),
],
};
oder compiler.apply(), wenn du einen Express-basierten Dev-Server verwendest:
compiler.apply(new DashboardPlugin());
Sie können das Dashboard gerne ausprobieren, um die wahrscheinlichen Verbesserungsmöglichkeiten zu finden. Scrollen Sie beispielsweise durch den Bereich Module, um herauszufinden, welche Bibliotheken zu groß sind und durch kleinere Alternativen ersetzt werden könnten.
Bundlesize
Mit bundlesize wird geprüft, ob webpack-Assets die angegebenen Größen nicht überschreiten. Integrieren Sie es in eine CI, um benachrichtigt zu werden, wenn die App zu groß wird:
So konfigurieren Sie sie:
Maximale Größen
Optimieren Sie die App, damit sie so klein wie möglich ist. Führen Sie den Produktions-Build aus.
Fügen Sie
package.jsonden Abschnittbundlesizemit dem folgenden Inhalt hinzu:// package.json { "bundlesize": [ { "path": "./dist/*" } ] }Führen Sie
bundlesizemit npx aus:npx bundlesizeDadurch wird die mit gzip komprimierte Größe jeder Datei ausgegeben:
PASS ./dist/icon256.6168aaac8461862eab7a.png: 10.89KB PASS ./dist/icon512.c3e073a4100bd0c28a86.png: 13.1KB PASS ./dist/main.0c8b617dfc40c2827ae3.js: 16.28KB PASS ./dist/vendor.ff9f7ea865884e6a84c8.js: 31.49KBFügen Sie jeder Größe 10–20% hinzu, um die maximalen Größen zu erhalten. Mit diesem Spielraum von 10–20% können Sie die App wie gewohnt entwickeln und werden gewarnt, wenn die Größe zu groß wird.
bundlesizeaktivierenInstallieren Sie das
bundlesize-Paket als Entwicklungsabhängigkeit:npm install bundlesize --save-devGeben Sie im Abschnitt
bundlesizeim Bereichpackage.jsondie konkreten maximalen Größen an. Für einige Dateien (z.B. Bilder) können Sie die maximale Größe pro Dateityp angeben, nicht pro Datei:// package.json { "bundlesize": [ { "path": "./dist/*.png", "maxSize": "16 kB", }, { "path": "./dist/main.*.js", "maxSize": "20 kB", }, { "path": "./dist/vendor.*.js", "maxSize": "35 kB", } ] }Fügen Sie ein npm-Script hinzu, um die Prüfung auszuführen:
// package.json { "scripts": { "check-size": "bundlesize" } }Konfigurieren Sie die CI so, dass
npm run check-sizebei jedem Push ausgeführt wird. (Und integrierebundlesizein GitHub, wenn du das Projekt darauf entwickelst.)
Geschafft! Wenn Sie jetzt npm run check-size ausführen oder den Code per Push übertragen, werden Sie feststellen, ob die Ausgabedateien klein genug sind:
Oder bei Fehlern:
Weitere Informationen
Analysieren, warum das Paket so groß ist
Sie sollten sich das Paket genauer ansehen, um zu sehen, welche Module darin Platz belegen. webpack-bundle-analyzer:
webpack-bundle-analyzer scannt das Bundle und erstellt eine Visualisierung des Inhalts. Mit dieser Visualisierung können Sie große oder unnötige Abhängigkeiten finden.
Installieren Sie das Paket webpack-bundle-analyzer, um das Analyse-Tool zu verwenden:
npm install webpack-bundle-analyzer --save-dev
Fügen Sie der webpack-Konfiguration ein Plug-in hinzu:
// webpack.config.js
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
plugins: [
new BundleAnalyzerPlugin(),
],
};
und den Produktionsbuild ausführen. Das Plug-in öffnet die Statistikseite in einem Browser.
Standardmäßig wird auf der Statistikseite die Größe der geparsten Dateien angezeigt (d.h. der Dateien, wie sie im Bundle angezeigt werden). Sie sollten die GZIP-Größen vergleichen, da diese der Erfahrung echter Nutzer näher kommen. Verwenden Sie die Seitenleiste links, um die Größen zu wechseln.
Darauf sollten Sie im Bericht achten:
- Große Abhängigkeiten Warum sind sie so groß? Gibt es kleinere Alternativen (z.B. Preact (anstelle von React)? Verwenden Sie den gesamten Code, z.B. Moment.js enthält viele Sprachen, die oft nicht verwendet werden und entfernt werden könnten.
- Duplizierte Abhängigkeiten: Wird dieselbe Bibliothek in mehreren Dateien wiederholt? Verwenden Sie dazu beispielsweise die Option
optimization.splitChunks.chunksin Webpack 4 oderCommonsChunkPluginin Webpack 3, um sie in eine gemeinsame Datei zu verschieben. Oder hat das Bundle mehrere Versionen derselben Bibliothek? - Ähnliche Abhängigkeiten Gibt es ähnliche Bibliotheken, die ungefähr dieselbe Aufgabe erfüllen? (z.B.
momentunddate-fnsoderlodashundlodash-es). Verwenden Sie möglichst immer dasselbe Tool.
Sehen Sie sich auch die hervorragende Analyse von webpack-Bundles von Sean Larkin an.
Zusammenfassung
- Mit
webpack-dashboardundbundlesizedie Größe Ihrer App im Blick behalten - Finde mit
webpack-bundle-analyzerheraus, wodurch sich die Größe erhöht