Lorsque Webpack regroupe vos modules, il suit la chaîne de dépendance du module que vous avez importé (ou requis) et extrait toutes ses dépendances et les regroupe également jusqu'à la fin de la chaîne.
S'il y a un fichier qu'il ne sait pas charger dans cette chaîne de dépendance, ce type d'erreur sera généré.
Cela peut parfois être résolu en ajoutant un chargeur qui sait charger ce type de dépendance. Si, toutefois, la dépendance est un module non natif, Webpack ne peut pas le charger. Certains des chargeurs savent comment charger des modules avec des dépendances non natives en supprimant et en excluant la partie non native afin qu'elle se charge. Dans le fs
module par exemple, vous n'avez pas besoin de pouvoir lire et écrire des fichiers à partir du disque car le navigateur ne peut pas le faire, donc pas besoin d'inclure cette partie.
Cela soulève la question :de quelle fonctionnalité du module mangouste avez-vous besoin dans le navigateur ? Pouvez-vous inclure uniquement cette fonctionnalité et non l'intégralité du module mangouste ?
Si vous êtes en mesure de le faire, vous pourrez peut-être résoudre 2 problèmes :
- Vous pouvez résoudre le problème de regroupement Webpack, car la partie de mongoose que vous incluez dans votre projet n'a pas de sous-dépendances problématiques.
- Vous allez créer un bundle plus petit avec Webpack, car vous n'inclurez que les parties dont vous avez besoin, de sorte que la charge utile bundle.js vers le client sera beaucoup plus petite.
Par exemple, j'ai récemment eu besoin d'utiliser le générateur mongodb ObjectId dans le client. J'ai découvert que Webpack était incapable de gérer le import mongodb from 'mongodb'
composant donc en creusant dans les dépendances j'ai trouvé que mongodb
dépend de mongodb-core
qui dépend de bson
qui a le ObjectId
méthode dont j'avais besoin.
En important uniquement le bson
composant de cette chaîne de dépendance, j'ai contourné le problème Webpack et j'ai rendu mon paquet beaucoup plus petit.
Si vous utilisez Npm 3, il y a de fortes chances que bson
est installé à la racine de node_modules
si vous utilisez déjà mongoose ou mongodb pour pouvoir import
sans y mettre une référence explicite dans votre package.json
. Cela comporte évidemment le risque que si la dépendance supérieure cesse d'en dépendre, votre build se cassera et vous devrez npm install
cela indépendamment. L'avantage d'utiliser cette approche est que vous utiliserez toujours la même version de bson
que la dépendance supérieure utilise, ce qui pourrait être important.