2013-04-04 2 views
100

Ich habe eine Anwendung, die die üblichen Abhängigkeiten von Modulen von Drittanbietern (z. B. 'Express') in der Datei package.json unter Abhängigkeiten angegeben hat. Z.B.wie lokale Module als npm Paketabhängigkeiten angeben

"express"  : "3.1.1" 

Ich möchte meinen eigenen Code modular strukturieren und eine Reihe von lokalen haben (dh auf dem Dateisystem i bin derzeit in) Module vom package.json installiert werden. Ich weiß, dass ich ein lokales Modul durch Laufen installieren:

npm install path/to/mymodule 

Aber ich weiß nicht, wie dies über die package.json Abhängigkeiten Struktur passieren. Die Verwendung der Option --save in diesem Befehl setzt einfach in meine package.json (bezieht sich nicht auf den Speicherort des Dateipfads). Wenn ich dann die installierte Version von node_modules entferne und versuche, es von der package.json neu zu installieren, schlägt es fehl (weil es in der zentralen Registrierung nach "mymodule" sucht und nicht lokal sucht).

Ich bin mir sicher, das ist eine Möglichkeit, die "dependencies": {} Struktur zu erklären, die ich möchte, dass es von einem Dateisystempfad installiert wird, aber ich weiß nicht wie.

Hat jemand anderes dieses Problem? Danke.

+0

Eine wirklich gute Frage. Traurig zu erkennen, dass es kein Feature-Äquivalent für 'Paket gibt.json' zu dem, was wir in Gemfiles haben. – Jarl

+2

mögliches Duplikat von [Lokale Abhängigkeit in package.json] (http://stackoverflow.com/questions/14381898/local-dependency-in-package-json) – Kelly

Antwort

1

Wenn es acceptible ist einfach Ihre Module in node_modules neben anderen Dateien vorinstalliert zu veröffentlichen, können Sie es wie folgt tun:

// ./node_modules/foo/package.json 
{ 
    "name":"foo", 
    "version":"0.0.1", 
    "main":"index.js" 
} 

// ./package.json 
... 
"dependencies": { 
    "foo":"0.0.1", 
    "bar":"*" 
} 

// ./app.js 
var foo = require('foo'); 

Sie können auch Ihr Modul auf git speichern und Ihre Eltern Paket erzählen. json die Abhängigkeit von git zu installieren: https://npmjs.org/doc/json.html#Git-URLs-as-Dependencies

+4

Leider würde dies bedeuten, dass node_module meine lokalen Module und Drittanbieter/beigetragen haben Module, die aus der Registrierung (z. B. connect) im selben Verzeichnis installiert wurden. Abgesehen davon, dass es aus einer Git/VCS-Perspektive verwirrend ist (dh alle in node_module außer den von mir erstellten ignorieren müsste), ist es auch eine schlechte Praxis (diejenigen, die ich geschrieben habe und nicht veröffentlicht werden sollten, sollten getrennt von den anderen geschrieben und veröffentlicht werden). –

+0

Wenn ich ein lokales Modul hinzufüge, dann nehmen Sie Änderungen vor, die von meiner Hauptanwendung nicht gesehen werden. Warum ist das der Fall? –

6

ich nicht eine saubere Art und Weise am Ende finden konnte, so ging ich für ein Verzeichnis local_modules genannt erstellen und dann hinzugefügt, um diese bashscript zum package.json in scripts-> Preinstall

#!/bin/sh 
for i in $(find ./local_modules -type d -maxdepth 1) ; do 
    packageJson="${i}/package.json" 
    if [ -f "${packageJson}" ]; then 
     echo "installing ${i}..." 
     npm install "${i}" 
    fi 
done 
138

Ab NPM 2.0.0 wird die lokale Abhängigkeiten importieren nativ unterstützt. Dies war documented by danilopopeye in response to a similar question. Ich habe seine Antwort hier kopiert, um jedem zu helfen, der die richtige Antwort finden muss, da diese Frage in den Google-Suchergebnissen sehr hoch ist.

Diese Funktion wurde in der Version 2.0.0 von npm implementiert. Zum Beispiel:

{ 
    "name": "baz", 
    "dependencies": { 
    "bar": "file:../foo/bar" 
    } 
} 

Jede der folgenden Pfade sind auch gültig:

../foo/bar 
~/foo/bar 
./foo/bar 
/foo/bar 
+2

Das hat für mich funktioniert. (Ich habe gerade einen lokalen relativen Pfad wie '" mymodule ":" file: mymoduledir "' –

+1

Getestet und arbeitet mit npm 5.0.3 –

+11

'' 'npm installieren --save ../ my-local-repo''' –

0

Nach viel mit dem npm Link-Befehl zu kämpfen (vorgeschlagene Lösung für die Entwicklung von lokalen Module, ohne sie zu einem Registrierungs zu veröffentlichen oder eine separate Kopie im Ordner node_modules), ich baute ein kleines npm-Modul, um mit diesem Problem zu helfen: https://www.npmjs.com/package/lib-manager

Ich hoffe, es hilft jemandem.