it-swarm.com.de

Unterschied zwischen `npm link x` und` npm install / path / to / x`

Ich dachte, ich verstehe den Unterschied zwischen

npm link x

und

npm install /local/path/to/x

ursprünglich dachte ich, dass der erstere einen Symlink zu x erstellt hat, während der letztere eine separate Kopie von x in Ihrem Projekt installiert hat, anstatt sie zu symbolisieren.

Vor kurzem habe ich jedoch festgestellt, dass mein ursprünglicher Eindruck falsch war und beide Symlinks zu verwenden scheinen. Gibt es also einen Unterschied zwischen den beiden und dem, was es ist?

28
Alexander Mills

Ein Artikel über Medium von Alex Mills legt es nackt aus.

Es heißt, der Unterschied zwischen npm link x Und npm install /local/path/to/x Sei:

  1. Der große Unterschied besteht darin, dass npm install /local/path/x Die Vorinstallations-/Nachinstallations-Hooks ausführt, npm link x Jedoch nicht.

  2. npm link Verwendet den globalen NPM-Speicherplatz, npm install /local/path/x Nicht. npm link erzeugt einen Symlink zu x im globalen Raum. Wenn Sie dann npm link x von y aufrufen, erzeugt es einen Symlink nicht direkt zu x, sondern zum globalen Symlink. Dies ist ein wichtiger Unterschied, wenn Sie verschiedene globale node.js-Versionen verwenden, z. B. NVM.

  3. npm install /absolute/path/x Ändert package.json, npm link x Nicht.

Um eine neue lokale Kopie anstelle eines Symlinks zu erhalten, verwenden Sie npm pack Wie folgt:

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

Sie könnten auch cp/rsync verwenden, aber das würde keine Installations-Hooks ausführen oder die ausführbaren Dateien in node_modules/.bin Einfügen ... das wird funktionieren.

17
Alexander Mills

npm link

npm link
npm link <folder>

Beide obigen Befehle erzeugen einen Symlink des <folder> in den globalen Paketen.

Jetzt npm link <folder> wird den gleichen Link in Ihrem node_modules Ordner auch für Ihr aktuelles Projekt. Und diese Namen basieren auf dem Projektnamen in package.json und nicht basierend auf dem Ordnernamen, den Sie verknüpfen

Das package.json Ihres aktuellen Projekts wird nicht berührt oder verändert

Die Abhängigkeiten des Pakets werden weiterhin installiert, wie Sie im Code hier sehen können

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

Also, um es zusammenzufassen

  1. Es wird ein Symlink im globalen Ordner erstellt (immer)
  2. Die package.json wird nicht geändert
  3. Fehlende Abhängigkeiten werden installiert

npm install

Jetzt npm install <folder> ist ein bisschen anders

  1. Es wird kein Symlink im globalen Ordner erstellt
  2. Es ändert und fügt den Verweis auf package.json hinzu
  3. Es wird ein Symlink zum Originalordner erstellt
5
Tarun Lalwani