5 votes

Le gestionnaire de packages Node (NPM) semble générer des packages en double

J'ai installé quelques packages node et ce que j'ai remarqué, c'est que NPM crée plusieurs doublons.

Par exemple, j'ai d'abord installé mongoose, qui a installé plusieurs dépendances, naturellement. Ensuite, j'ai installé le package mongodb, qui est également venu avec bson en tant que dépendance. En raison de dépendances superposées, j'ai l'anomalie suivante :

Mongodb est présent dans les répertoires suivants :

/usr/local/lib/node_modules/mongodb/
/usr/local/lib/node_modules/mongoose/node_modules/mongodb/

Aussi, bson, une dépendance de mongodb est présente dans les deux cas :

/usr/local/lib/node_modules/mongodb/
/usr/local/lib/node_modules/mongoose/node_modules/mongodb/

Je réalise que ce ne sont que des fichiers de quelques kilooctets, mais j'ai l'impression que cela pourrait créer beaucoup de redondance et je pourrais me retrouver avec un arbre très complexe similaire au suivant :

/usr/local/lib/node_modules/[quelquechose1]/node_modules/[quelquechose2]/node_modules/[quelquechose3/.../.../node_modules/[quelquechoseX]/

Dans ce scénario, une [dépendance] donnée pourrait être présente sur X niveaux sous /usr/local/lib/node_modules.

Ma principale préoccupation est liée à la mise à jour de ces modules. Je trouve facile d'imaginer avoir simultanément des modules de différentes versions installées en même temps.

Ne serait-il pas plus facile de tout mettre directement dans /usr/local/lib/node_modules/ et ensuite de faire des références croisées aux dépendances ?

3voto

balupton Points 17805

Le problème survient lorsque mongoose n'est codé que pour fonctionner avec, disons, la version 1 de mongodb, et que vous avez codé votre application pour fonctionner avec la version 2 de mongodb - par conséquent, il installe et charge les deux versions pour que tout fonctionne. Nous pouvons le faire facilement en node, car la façon dont le module require fonctionne ne pollue pas l'espace de noms global, contrairement au navigateur - ce qui rend la gestion et l'inclusion des bonnes dépendances extrêmement compliquée en raison de la pollution de l'espace de noms global.

Maintenant, si votre package.json et le package.json de mongoose autorisent la même version de mongodb (vous pouvez spécifier une version spécifique ou une plage), alors exécuter rm -Rf node_modules; npm install installera une seule copie de mongodb, plutôt que deux. Cependant, comme indiqué précédemment, si plusieurs versions sont spécifiées, plusieurs versions seront installées et chargées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X