web-dev-qa-db-fra.com

plugin webpack common chunks vs plugin webpack dll

Avant d'utiliser le plugin Webpack Common Chunks pour créer un ensemble de fournisseurs contenant des bibliothèques tierces telles que Angular, React, Lodash, etc., mais je connaissais le plugin Webpack DLL. Ils semblent faire la même chose mais le plugin dll vous permet également de réduire le temps de construction. Je suis donc confus, dois-je utiliser ces deux plugins ensemble. Dois-je utiliser le plugin de morceaux communs pour créer un bundle de fournisseurs dans la génération de production et le plugin dll dans la version de développement. Ou devrais-je utiliser le plugin dll dans les versions de production et de développement? Pouvez-vous expliquer cela s'il vous plaît?

28
pavel06081991

Désolé pour la longue réponse, mais espérons que cela peut aider à rendre les choses plus claires.

Justification de CommonsChunkPlugin

L'auteur du projet définit un certain nombre de points d'entrée d'application qui produiront chacun un ensemble. Des exemples typiques sont fournisseur , polyfills , main , mais par exemple, votre application peut être divisée en plusieurs "zones" indépendantes qu'il est judicieux de charger séparément (comme par exemple la connexion, le principal, les paramètres).

L'auteur du projet définit ensuite lequel de ces ensembles, ou un ensemble distinct, doit contenir du code commun à tous. Il s'agit typiquement de bibliothèques tierces et de vos propres utilitaires partagés sur tous les points d'entrée.

Ensuite, il est de la responsabilité du plugin d'analyser et de collecter ce code commun, puis de le mettre dans un ensemble défini. Toutes ces analyses et travaux se produisent encore et encore chaque fois que vous démarrez une nouvelle génération, et - en mode veille - lorsque vous modifiez du code qui est partagé et qui tombe dans le paquet commun.

Une telle répartition est utile à la fois pour une version de développement et pour une version de production. Mais pour l'environnement de développement, disons simplement que la reconstruction du code lié aux fournisseurs et aux polyfills peut prendre un certain temps et cela peut être un gaspillage lorsque vous ne changez pas vraiment ces parties (en supposant que le code tiers dont vous dépendez est plus grand que votre propre base de code).

Justification de DllPlugin

Étant donné le même environnement, par exemple le développement, l'auteur du projet crée deux configurations de pack Web là où il y en avait une auparavant. Le plugin pourrait être appliqué à l'environnement de production, bien que l'on puisse dire que DllPlugin a plus de sens dans le développement (voir ci-dessous).

La première configuration de construction de webpack est nécessaire pour les DLL dites , qui sont assez proches du code commun vu précédemment, mais pas exactement. À ma connaissance, les DLL ont généralement tendance à regrouper le code tiers (fournisseur et polyfills) et non votre propre code d'utilitaire partagé, mais là encore, il s'agit plutôt d'une impression et non d'une règle stricte. Quoi qu'il en soit, l'auteur du projet doit regrouper le code qui change beaucoup moins fréquemment au cours d'une session de développement normale. L'idée, dans un environnement de développement, est d'exécuter cette génération de temps en temps, par exemple lorsqu'une dépendance change. Et généralement, c'est au développeur de lancer cette version quand il le pense.

L'autre configuration de construction de webpack est nécessaire pour le propre code du projet, ou de toute façon le code qui change régulièrement pendant le travail de développement. Il s'agit de la version réelle que le développeur exécutera encore et encore, ou exécutera en mode veille, et à ce stade, elle devrait être beaucoup plus rapide par rapport à la version unique vue dans le scénario CommonsChunk.


Donc, dans l'ensemble, ils semblent similaires, mais ils vous permettent de toucher différentes cibles. Tellement, que vous pourriez envisager d'utiliser DllPlugin pour votre environnement de développement (avantage: temps de compilation court), tout en utilisant CommonsChunkPlugin pour la production (avantage: temps de chargement court lorsque l'application change). Encore une fois, vous pouvez également utiliser DllPlugin également en production, avec le petit inconvénient d'avoir à exécuter deux versions consécutives: une pour les DLL, puis celle pour l'application.

HTH

31
superjos

Vous utilisez l'un ou l'autre. Voici un article , qui décrit comment utiliser DllPlugin et en bas de la page, vous pouvez voir des méthodes alternatives pour accomplir la même chose. Il vous indique quelles sont les différences ainsi que les avantages et les inconvénients. Cela devrait vous aider à démarrer.

10
user981375

Je cherchais la différence ici aussi, mais je ne pense vraiment pas que ce soit le cas. Du moins, plus maintenant.

Si vous jetez un œil à la documentation webpack pour les bibliothèques de fractionnement de code, il mentionne un moyen d'extraire un fichier manifeste similaire. D'après ce que je comprends, c'est ce que fait le DllPlugin, sauf qu'il est légèrement plus implicite avec le CommonsChunkPlugin.

L'avantage est que vous n'avez pas besoin de maintenir plusieurs configurations Webpack pour ce type de fonctionnalité.

4
adam-beck