Je reçois le sens général que l' CommonsChunkPlugin
regarde tous les points d'entrée, vérifie si il y a des paquets courants/les dépendances entre eux et les sépare dans leur bundle.
Ainsi, supposons que j'ai la configuration suivante:
...
enrty : {
entry1 : 'entry1.js', //which has 'jquery' as a dependency
entry2 : 'entry2.js', //which has 'jquery as a dependency
vendors : [
'jquery',
'some_jquery_plugin' //which has 'jquery' as a dependency
]
},
output: {
path: PATHS.build,
filename: '[name].bundle.js'
}
...
Si je bundle sans l'aide d' CommonsChunkPlugin
Je vais finir avec 3 nouveaux groupes de fichiers:
-
entry1.bundle.js
qui contient le code complet deentry1.js
etjquery
et contient sa propre exécution -
entry2.bundle.js
qui contient le code complet deentry2.js
etjquery
et contient sa propre exécution -
vendors.bundle.js
qui contient le code complet dejquery
etsome_jquery_plugin
et contient sa propre exécution
C'est évidemment mauvais parce que je vais potentiellement charge jquery
3 fois dans la page, donc nous ne voulons pas que.
Si je bundle avec CommonsChunkPlugin
Selon les arguments que je passe à l' CommonsChunkPlugin
tout se passe ce qui suit:
-
CAS 1 : Si je passe
{ name : 'commons' }
je vais finir avec les groupes de fichiers suivants:-
entry1.bundle.js
qui contient le code complet deentry1.js
, une exigence pour l'jquery
et ne contient pas l'exécution -
entry2.bundle.js
qui contient le code complet deentry2.js
, une exigence pour l'jquery
et ne contient pas l'exécution -
vendors.bundle.js
qui contient le code complet desome_jquery_plugin
, une exigence pour l'jquery
et ne contient pas l'exécution -
commons.bundle.js
qui contient le code complet dejquery
et contient le moteur d'exécution
De cette façon, nous nous retrouvons avec quelques petits faisceaux global et le moteur d'exécution est contenue dans l'
commons
bundle. Plutôt ok, mais pas idéal. -
-
CAS 2 : Si je passe
{ name : 'vendors' }
je vais finir avec les groupes de fichiers suivants:-
entry1.bundle.js
qui contient le code complet deentry1.js
, une exigence pour l'jquery
et ne contient pas l'exécution -
entry2.bundle.js
qui contient le code complet deentry2.js
, une exigence pour l'jquery
et ne contient pas l'exécution -
vendors.bundle.js
qui contient le code complet dejquery
etsome_jquery_plugin
et contient le moteur d'exécution.
De cette façon, encore une fois, nous nous retrouvons avec quelques petits faisceaux dans l'ensemble, mais l'exécution est maintenant contenue dans l'
vendors
bundle. C'est un peu pire que le cas précédent, puisque le moteur d'exécution est maintenant dans l'vendors
bundle. -
-
CAS 3 : Si je passe
{ names : ['vendors', 'manifest'] }
je vais finir avec les groupes de fichiers suivants:-
entry1.bundle.js
qui contient le code complet deentry1.js
, une exigence pour l'jquery
et ne contient pas l'exécution -
entry2.bundle.js
qui contient le code complet deentry2.js
, une exigence pour l'jquery
et ne contient pas l'exécution -
vendors.bundle.js
qui contient le code complet dejquery
etsome_jquery_plugin
et ne contient pas l'exécution -
manifest.bundle.js
qui contient des exigences pour tous les autres bundle et contient le moteur d'exécution
De cette façon, nous nous retrouvons avec quelques petits faisceaux global et le moteur d'exécution est contenue dans l'
manifest
bundle. C'est le cas idéal. -
Ce que je ne comprends pas/je ne suis pas sûr de comprendre
Dans le CAS 2 pourquoi avons-nous fini avec l'
vendors
bundle contenant à la fois le code commun (jquery
) et ce qui restait de l'vendors
participation (some_jquery_plugin
)? De ma compréhension, ce que l'CommonsChunkPlugin
n'était ici qu'il a réuni, le code commun (jquery
), et depuis que nous avons forcé à la sortie de l'vendors
bundle, il sorte de "fusionné" le code commun dans l'vendors
bundle (qui ne contient que le code de l'some_jquery_plugin
). Merci de confirmer ou de les expliquer.Dans le CAS 3 , je ne comprends pas ce qui s'est passé lorsque nous avons adopté
{ names : ['vendors', 'manifest'] }
pour le plugin. Pourquoi/comment était l'vendors
bundle gardé intacte, contenant à la foisjquery
etsome_jquery_plugin
, lorsquejquery
est clairement une commune de la dépendance, et pourquoi elle a été généréemanifest.bundle.js
fichier créé la façon dont il a été créé (exigeant que tous les autres faisceaux et contenant le moteur d'exécution) ?