2017-08-13 6 views
0

Ich habe ein Paket (package-a), das von einem anderen Paket (package-b) abhängt, das nicht zu npm veröffentlicht wird, aber auf meinem Dateisystem ist. Wenn ich npm install von package-a, package-b laufen Abhängigkeiten sind nicht installiert. Ich muss zum Verzeichnis package-b navigieren und npm install manuell ausführen. Gibt es eine Möglichkeit, die Abhängigkeiten beider Pakete mit einem einzigen npm-Befehl zu installieren?`npm install` installiert keine lokalen Abhängigkeiten des lokalen Pakets

Hier ist meine Verzeichnisstruktur:

/ 
    ... 
    shared/ 
    ... 
    javascript/ 
     ... 
     package-b/ 
     package.json 
    package-a/ 
    package.json 

Per the docs stellte ich folgendes in package-a/package.json. (Ich verwende npm 5+)

dependencies: { 
    package-b: "file:../shared/javascript/package-b", 
} 

Als ich /package-a navigieren und führen npm install, es alle package-a ‚s Abhängigkeiten wie normal und auch Kopien installiert das package-b Verzeichnis package-a/node_modules. Vermutlich kann ich require('package-b') statt require('../shared/javascript/package-b') eingeben.

Aber, wie ich bereits erwähnt, package-b s Abhängigkeiten nicht installiert, so dass, wenn ich versuche, package-a zu verwenden, ich eine Fehlermeldung erhalten, wenn package-b ist require d, weil es versucht, Abhängigkeiten zu verwenden, die nicht lokal existieren.

Noch einmal, um dies zu lösen, kann ich zu package-b navigieren und npm-install ausführen, aber ich hoffe, es gibt eine bessere Lösung, wie ich viele solche Unterpakete haben kann und ich möchte vermeiden, ein Shell-Skript zu schreiben um alle meine Abhängigkeiten zu installieren, wenn ich das mit einem npm-Befehl machen kann. (Vielleicht habe ich nur etwas falsch und npm install sollte arbeiten werden?)


Follow-up-Frage: Wenn ich npm install von package-b ‚s Verzeichnis ausführen, werden die Pakete dort installiert, aber nicht in der Version von package-b, die bekam kopiert auf /package-a/node_modules während der ersten npm install, noch funktioniert alles noch. So, jetzt scheint es, als wenn ich require('package-b') es tatsächlich auf /shared/javascript/package-b und nicht /package-a/node_modules/package-b löst. Also, was ist der Sinn des Kopierens der Datei an erster Stelle?


aktualisieren

Es stellt sich heraus, das ist ein Fehler in npm 5. Es occurrs nur, wenn sie von einer package-lock.json Datei zu installieren. (Github Issue)

Antwort

1

Die Dateien werden (wahrscheinlich) nicht kopiert, sie sind symbolisch verknüpft (Symlink). Dies erzeugt im Wesentlichen einen Alias ​​/ eine Verknüpfung, die wie ein echtes Verzeichnis aussieht, aber auf einen anderen Pfad zeigt.

So funktioniert die ältere npm link Funktion. Der Grund ist, dass der Code "live" bleibt; Änderungen im verknüpften Modul werden immer dann berücksichtigt, wenn Sie das Modul ausführen, das auf sie verweist, dh Sie müssen nicht ständig die npm update haben.

+0

das beantwortet meine zweite Frage (danke), aber nicht meine erste – LukeP

+0

Stellt sich heraus, das Verhalten in Frage ist aufgrund eines Fehlers in npm. Ich werde diese Antwort jetzt akzeptieren, da sie meine zweite Frage beantwortet. – LukeP

Verwandte Themen