451 Stimmen

Wie man lokale Module als npm-Paketabhängigkeiten angibt

Ich habe eine Anwendung, die den üblichen Satz von Abhängigkeiten von Drittanbietermodulen (z. B. 'express') hat, die in der package.json-Datei unter Abhängigkeiten angegeben sind. Z.B.

"express"     : "3.1.1"

Ich würde gerne meinen eigenen Code modular strukturieren und eine Reihe von lokalen (d.h. im Dateisystem, in dem ich mich gerade befinde) Modulen durch die package.json installieren lassen. Ich weiß, dass ich ein lokales Modul installieren kann, indem ich Folgendes ausführe:

npm install Pfad/zum/meinemodul

Ich weiß jedoch nicht, wie ich dies über die Struktur der package.json-Abhängigkeiten erreichen kann. Die Verwendung der Option --save bei diesem Befehl setzt lediglich "mymodule": "0.0.0" in meine package.json (bezieht sich nicht auf den Dateipfad). Wenn ich dann die installierte Version aus node_modules entferne und versuche, sie aus der package.json erneut zu installieren, schlägt dies fehl (weil es nach "mymodule" im zentralen Register sucht und nicht lokal).

Ich bin sicher, dass es einen Weg gibt, der "dependencies": {}-Struktur mitzuteilen, dass ich möchte, dass sie aus einem Dateisystempfad installiert wird, aber ich weiß nicht, wie.

Hat jemand anderes dieses Problem gehabt? Danke.

721voto

Randy the Dev Punkte 24248

npm install unterstützt dies jetzt

npm install --save ../path/to/mymodule

Um dies zu ermöglichen, muss mymodule als Modul mit seiner eigenen package.json konfiguriert sein. Siehe Erstellen von NodeJS-Modulen.

Ab npm 2.0 werden lokale Abhängigkeiten nativ unterstützt. Siehe danilopopeyes Antwort auf eine ähnliche Frage. Ich habe seine Antwort hier kopiert, da diese Frage in den Suchergebnissen sehr hoch rangiert.

Dieses Feature wurde in der Version 2.0.0 von npm implementiert. Zum Beispiel:

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

Die folgenden Pfade sind ebenfalls gültig:

../foo/bar
~/foo/bar
./foo/bar
/foo/bar

Updates synchronisieren

Da npm install das Paket im Verzeichnis als Symlink im aktuellen Projekt hinzufügt, werden Änderungen am lokalen Paket automatisch synchronisiert.

57voto

jasoncrawford Punkte 2673

Siehe: Lokale Abhängigkeit in package.json

Es sieht so aus, als wäre die Antwort npm link: https://docs.npmjs.com/cli/link

16voto

Sam Adams Punkte 4617

Am Ende konnte ich keine einfache Lösung finden, also entschied ich mich dafür, ein Verzeichnis namens local_modules zu erstellen und dieses Bash-Skript zur package.json unter scripts->preinstall hinzuzufügen

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

7voto

joe abou nakkoul Punkte 283

Sie können einfach Ihrer package.json-Datei in Ihrem Projekt hinzufügen

"Paketname" : "Pfad/zum/Paket"

und dann npm i in Ihrem Projekt ausführen

6voto

Anurag Dutta Punkte 61

Nachdem ich viel mit dem npm link Befehl gekämpft habe (eine vorgeschlagene Lösung für die Entwicklung lokaler Module, ohne sie in einem Registry zu veröffentlichen oder eine separate Kopie im node_modules-Ordner aufrechtzuerhalten), habe ich ein kleines npm-Modul erstellt, um dieses Problem zu lösen.

Die Behebung erfordert zwei einfache Schritte.

Erstens:

npm install lib-manager --save-dev

Zweitens füge dies zu deinem package.json hinzu:

{  
  "name": "yourModuleName",  
  // ...
  "scripts": {
    "postinstall": "./node_modules/.bin/local-link"
  }
}

Weitere Details unter https://www.npmjs.com/package/lib-manager. Hoffentlich hilft es jemandem.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X