58 votes

Différence entre `npm link x` et` npm install / path / to / x`

Je pensais avoir compris la différence entre

 npm link x
 

et

 npm install /local/path/to/x
 

à l'origine, je pensais que le premier avait créé un lien symbolique vers x, tandis que le second avait installé une copie distincte de x dans votre projet, au lieu de créer un lien symbolique.

Cependant, j'ai récemment remarqué que mon impression d'origine était fausse, et ils semblent tous les deux utiliser des liens symboliques - alors y a-t-il une différence entre les deux et quelle est-elle?

45voto

Alex Mills Points 635

Un article sur les Moyennes par Alex Mills pose nue.

Il dit que la différence entre npm link x et npm install /local/path/to/x sont:

  1. La grande différence est qu' npm install /local/path/xsera exécutez la préinstallation/postinstall crochets, mais npm link x ne le seront pas.

  2. npm link utilise le global MNP espace, npm install /local/path/x ne le sont pas. npm lien crée un lien symbolique vers x dans l'espace mondial, et puis quand vous appelez mnp lien x y, il crée un lien symbolique et non pas directement à x, mais plutôt à le mondial de lien symbolique. C'est une des différences importantes si vous êtes à l'aide de différents mondiale node.js versions, par exemple, NVM.

  3. npm install /absolute/path/x vont altérer le paquet.json, npm link x ne fait pas.

Pour obtenir une nouvelle copie locale au lieu d'un lien symbolique, utilisez npm pack, comme suit:

tgz="$PWD/$(npm pack)"
cd <other project>
npm install "$tgz"

Vous pouvez également utiliser cp/rsync, mais ce ne serait pas exécuter installez des crochets ou mettre les fichiers exécutables en node_modules/.bin...qui fonctionne.

9voto

Tarun Lalwani Points 75641

npm lien

npm link
npm link <folder>

Les deux de la commande ci-dessus va créer un lien symbolique de l' <folder> dans le global paquets.

Maintenant, npm link <folder> lien symbolique sera la même chose dans votre node_modules le dossier de votre projet en cours. Et ces noms serait basé sur le nom du projet en package.json , et ne repose pas sur le nom de dossier que vous créez un lien

L' package.json de votre projet en cours ne sera pas touché ou modifié

Les dépendances du paquet sera toujours installé comme vous pouvez le voir dans le code ici

https://github.com/nodejs/node/blob/31d5bdea70e44802918d6f4aa7c378bc1992be54/deps/npm/lib/link.js#L156

Donc, pour résumer

  1. Il crée un lien symbolique dans le dossier global (toujours)
  2. Il n'altère pas le paquet.json
  3. Il n'installer les dépendances manquantes

npm install

Maintenant, npm install <folder> est un peu différent de ce

  1. Il n'est pas de créer un lien symbolique dans le dossier global
  2. Il modifie et ajoute la référence à forfait.json
  3. Il crée un lien symbolique vers le dossier d'origine

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