2012-08-10 2 views
1

J'ai installé express, mongodb et mongoose. Ceci est le résultat de mon npm ls.npm: comment sont gérées les dépendances?

/home/merc/Bookings 
├─┬ [email protected] 
│ └─┬ [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └─┬ [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ └── [email protected] 
└─┬ [email protected] 
    ├── [email protected] 
    ├─┬ [email protected] 
    │ └── [email protected] 
    └── [email protected] 

Vous pouvez clairement voir que, pour une raison Jade est dans le répertoire racine (je suppose que cela est arrivé lorsque je lance « express » Mais là encore, « mongodb » est disponible en différentes versions (0.9.9 et 1.1.2) et donc bson (0.1.1 et un 0.0.4 inquiétant)

D'où mes questions: comment sont gérées les dépendances avec npm? ils aiment, quelle que soit la version qu'ils choisissent

Je suppose que la question est: est ce type de duplication "normal ", et" par conception "pour ainsi dire?

Merc.

Répondre

2

La réponse courte est, oui, c'est par conception. Lorsque vous require un module à partir du répertoire node_modules, il utilise le répertoire de niveau supérieur - par exemple, celui que vous spécifiez dans votre package.json.

D'autres paquets ont leurs propres fichiers package.json, et sont libres d'utiliser les versions qu'ils veulent et quand ils les require dans leur propre code, ils utiliseront leur propre dossier node_modules. Idéalement, les modules que vous utilisez ont des tests, etc. qui garantissent que les versions (ou même spécifient une gamme de versions, telles que 0.9.x) des dépendances qu'ils spécifient fonctionnent bien et que les anciennes versions des sous-dépendances ne sont pas disponibles. 'nécessairement signifie danger, bien que de nouvelles versions de ces modules pourraient bien sûr potentiellement corriger les bugs et ainsi de suite. Il peut être utile de trouver un module qui vous intéresse sur GitHub, de télécharger le référentiel, de mettre à jour le package.json et les dépendances vous-même et d'exécuter les tests pour voir si une nouvelle version fonctionne. Si oui, peut-être que l'auteur serait prêt à accepter un pull request avec votre mise à jour.

+0

Merci! Court et doux: D – Merc

Questions connexes