Wie installiere ich package.json-Abhängigkeiten mit npm im aktuellen Verzeichnis?


202

Ich habe eine Web-App: fooapp . Ich habe eine package.jsonin der Wurzel. Ich möchte alle Abhängigkeiten in einem bestimmten installieren node_modules directory. Wie mache ich das?

Was ich möchte

Nehmen wir an, ich habe zwei widgetAbhängigkeiten. Ich möchte mit einer Verzeichnisstruktur wie dieser enden:

node_modules/
  widgetA
  widgetB
fooapp/
  package.js
  lib
  ..

Was ich bekomme

Wenn ich renne, npm install fooapp/ bekomme ich folgendes:

node_modules/
  fooapp/
    node_modules/
      widgetA
      widgetB
    package.js
    lib/
    ..
fooapp/
  package.js
  lib/
  ..

npm erstellt eine Kopie meines App-Verzeichnisses im Verzeichnis node_modules und installiert die Pakete in einem anderen Verzeichnis node_modules.

Ich verstehe, dass dies für die Installation eines Pakets sinnvoll ist. Aber ich habe require()meine Web-App nicht in etwas anderem, ich führe sie direkt aus. Ich suche nach einer einfachen Möglichkeit, meine Abhängigkeiten in einem bestimmten Verzeichnis node_modules zu installieren.

Antworten:


387

Laufen:

npm install

In Ihrem App-Verzeichnis (dh wo sich package.json befindet) werden die Abhängigkeiten für Ihre App installiert, anstatt sie wie hier beschrieben als Modul zu installieren . Diese werden relativ zu Ihrer package.json-Datei in ./node_modules abgelegt (sie ist tatsächlich etwas komplexer als diese, überprüfen Sie also die npm-Dokumente hier ).

Sie können das Verzeichnis node_modules in das übergeordnete Verzeichnis Ihrer App verschieben, wenn Sie möchten, da der Mechanismus 'require' des Knotens dies versteht. Wenn Sie jedoch die Abhängigkeiten Ihrer App mit install / update aktualisieren möchten, sieht npm die verschobenen 'node_modules' nicht und erstellt stattdessen ein neues Verzeichnis, wiederum relativ zu package.json.

Um dies zu verhindern, erstellen Sie einfach einen Symlink zu den verschobenen node_modules aus Ihrem App-Verzeichnis:

ln -s ../node_modules node_modules

Fantastisch! Ich werde es ausprobieren und diese Antwort als akzeptiert markieren, wenn es funktioniert.
Daniel Beardsley

9
Obwohl es sich um eine funktionierende Lösung handelt, habe ich herausgefunden, dass sie npm linkin solchen Situationen bequemer ist, in denen Sie Module aus einem anderen Verzeichnis abrufen müssen (siehe stackoverflow.com/a/14387210/820520 )
melekes

14

In meinem Fall muss ich tun

sudo npm install  

Mein Projekt befindet sich in / var / www, daher muss ich auch die richtigen Berechtigungen festlegen.


15
Für die npm-Installation ist möglicherweise kein sudo erforderlich.
Allen Koo

2
Abhängig vom Benutzer, der die js-Datei ausführen muss, und den installierten Abhängigkeiten können Sie ausführen sudo -u [username] npm install. Besser einfach npm installund chowndas Verzeichnis node_modules rekursiv nachträglich.
TheLonelyGhost

5
Führen Sie npm niemals mit sudo aus, es sei denn, Sie verwenden -g- und selbst dann gibt es bessere Möglichkeiten, damit umzugehen.
Tkone

1
Danke für deine Antwort, aber warum ist das so? können Sie erklären? Ich meine, was ist, wenn ich ein Projekt habe, in dem ich einen Ordner mit Root-Berechtigungen behalten und Abhängigkeiten ohne -g installieren möchte oder muss? Vielleicht gibt es einen guten Grund, aber ich habe sudo npm ein paar Mal (ohne -g) installiert und nie Probleme bekommen. Prost!
Aesede

1
@RredCat Ich stimme der richtigen Vorgehensweise zu, aber nach einer Weile bemerkte ich, dass diese Diskussion in Richtung Ubuntu migriert wird. Es scheint, dass es ein Problem bei der Verwaltung einiger Berechtigungen und Ordner gibt, das Benutzer zur Verwendung zwingt sudo npm. Wieder nur in Ubuntu.
Aesede

0

Einfach ausführen

sudo npm i --save

Das ist alles

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.