Quali strumenti utilizzare per tenere traccia e analizzare il bundle webpack
Anche se configuri webpack per ridurre al minimo le dimensioni dell'app, è comunque importante monitorarla e sapere cosa include. In caso contrario, puoi installare una dipendenza che raddoppierà le dimensioni dell'app e non te ne accorgerai nemmeno.
Questa sezione descrive gli strumenti che ti aiutano a comprendere il tuo set.
Tieni traccia delle dimensioni del bundle
Per monitorare le dimensioni dell'app, utilizza webpack-dashboard durante lo sviluppo e bundlesize in CI.
dashboard-webpack
webpack-dashboard migliora l'output di webpack con le dimensioni delle dipendenze, l'avanzamento e altri dettagli. Ecco che aspetto ha:
Questa dashboard consente di monitorare le dipendenze di grandi dimensioni. Se ne aggiungi una, la vedrai immediatamente nella sezione Moduli.
Per attivarlo, installa il pacchetto webpack-dashboard
:
npm install webpack-dashboard --save-dev
Aggiungi il plug-in alla sezione plugins
della configurazione:
// webpack.config.js
const DashboardPlugin = require('webpack-dashboard/plugin');
module.exports = {
plugins: [
new DashboardPlugin(),
],
};
oppure compiler.apply()
se utilizzi un server di sviluppo basato su Express:
compiler.apply(new DashboardPlugin());
Non esitare a utilizzare la dashboard per trovare i probabili punti di miglioramento. Ad esempio, scorri la sezione Moduli per trovare le librerie troppo grandi che potrebbero essere sostituite con alternative più piccole.
bundlesize
bundlesize verifica che gli asset webpack non superino le dimensioni specificate. Integralo con un sistema di CI per ricevere una notifica quando l'app diventa troppo grande:
Per configurarlo:
Scopri le dimensioni massime
Ottimizza l'app in modo che sia il più piccola possibile. Esegui la build di produzione.
Aggiungi la sezione
bundlesize
apackage.json
con i seguenti contenuti:// package.json { "bundlesize": [ { "path": "./dist/*" } ] }
Esegui
bundlesize
con npx:npx bundlesize
Verranno stampate le dimensioni compresse di ogni file:
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.49KB
Aggiungi il 10-20% a ogni dimensione per ottenere le dimensioni massime. Questo margine del 10-20% ti consente di sviluppare l'app come al solito e di avvisarti quando le sue dimensioni aumentano eccessivamente.
Attiva
bundlesize
Installa il pacchetto
bundlesize
come dipendenza di sviluppo:npm install bundlesize --save-dev
Nella sezione
bundlesize
inpackage.json
, specifica le dimensioni massime concrete. Per alcuni file (ad es. le immagini), ti consigliamo di specificare le dimensioni massime per tipo di file, non per ciascun file:// package.json { "bundlesize": [ { "path": "./dist/*.png", "maxSize": "16 kB", }, { "path": "./dist/main.*.js", "maxSize": "20 kB", }, { "path": "./dist/vendor.*.js", "maxSize": "35 kB", } ] }
Aggiungi uno script npm per eseguire il controllo:
// package.json { "scripts": { "check-size": "bundlesize" } }
Configura la CI in modo che esegua
npm run check-size
a ogni push. (Inoltre, integrabundlesize
con GitHub se stai sviluppando il progetto su di esso.)
È tutto! Ora, se esegui npm run check-size
o invii il codice, vedrai se i file di output sono abbastanza piccoli:
Oppure, in caso di errori:
Per approfondire
Analizza il motivo per cui il pacchetto è così grande
Ti consigliamo di esaminare più a fondo il bundle per vedere quali moduli occupano spazio. Utilizza webpack-bundle-analyzer:
webpack-bundle-analyzer analizza il bundle e crea una visualizzazione del contenuto al suo interno. Utilizza questa visualizzazione per trovare dipendenze di grandi dimensioni o non necessarie.
Per utilizzare lo strumento di analisi, installa il pacchetto webpack-bundle-analyzer
:
npm install webpack-bundle-analyzer --save-dev
Aggiungi un plug-in alla configurazione di webpack:
// webpack.config.js
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
plugins: [
new BundleAnalyzerPlugin(),
],
};
ed eseguire la build di produzione. Il plug-in aprirà la pagina delle statistiche in un browser.
Per impostazione predefinita, la pagina delle statistiche mostra le dimensioni dei file analizzati (ovvero dei file così come appaiono nel bundle). Probabilmente ti consigliamo di confrontare le dimensioni gzip, poiché sono più vicine a quelle sperimentate dagli utenti reali. Utilizza la barra laterale a sinistra per cambiare le dimensioni.
Ecco cosa cercare nel report:
- Dipendenze grandi. Perché sono così grandi? Esistono alternative più piccole (ad es. Preact instead of React)? Utilizzi tutto il codice incluso (ad es. Moment.js include molti lotti di lingue spesso non utilizzate e che potrebbero essere eliminate.
- Dipendenze duplicate. La stessa libreria si ripete in più file? Utilizza, ad esempio,
l'opzione
optimization.splitChunks.chunks
in webpack 4 oCommonsChunkPlugin
in webpack 3 per spostarlo in un file comune. In alternativa, il pacchetto contiene più versioni della stessa libreria? - Dipendenze simili. Esistono librerie simili che svolgono più o meno lo stesso lavoro? Ad esempio,
moment
edate-fns
oppurelodash
elodash-es
. Prova a utilizzare un solo strumento.
Dai anche un'occhiata alla grande analisi dei bundle webpack di Sean Larkin.
Riepilogo
- Utilizza
webpack-dashboard
ebundlesize
per rimanere al corrente sulle dimensioni della tua app - Scopri cosa influisce sulle dimensioni con
webpack-bundle-analyzer