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.

4voto

Joshua Goldstein Punkte 257

Bei der Arbeit haben wir eine gemeinsame Bibliothek, die von einigen verschiedenen Projekten alle in einem einzigen Repository verwendet wird. Ursprünglich haben wir die veröffentlichte (private) Version verwendet (npm install --save rp-utils), aber das führte zu vielen unnötigen Versionsupdates, während wir entwickelten. Die Bibliothek befindet sich in einem Schwester-Verzeichnis zu den Anwendungen, und wir können einen relativen Pfad anstelle einer Version verwenden. Statt "rp-utils": "^1.3.34" in der package.json ist es jetzt:

{ 
  "dependencies": { ...
    "rp-utils": "../rp-utils",
   ...

Das Verzeichnis rp-utils enthält ein veröffentlichbares npm-Paket

3voto

Taranjeet Singh Punkte 99

Das Folgende sollte helfen (vorausgesetzt, die Bibliothek und die App teilen den gleichen übergeordneten Ordner)

In der Bibliothek:

npm pack // das packt die Bibliothek in eine .tgz-Datei

In der App, die die Bibliothek benötigt

npm i ../meinebibliothek/../bibliothekspaket-X.X.tgz

Dies führt zu folgenden Änderungen in deiner App

package.json wird nun haben

 "@meinebibliothek": "file:../meinebibliothek/bibliothekspaket-X.X.tgz",

2voto

wasserholz Punkte 1076

Verwenden Sie install-local

Ich hatte Probleme mit konkurrierenden React-Installationen aus der lokalen Abhängigkeit. Ich habe den Fehler behoben, indem ich das install-local npm-Paket verwendet habe. Dieses Paket erstellt keine Symbolischen Links, was mein Problem gelöst hat.

Schritte:

  1. Führen Sie npm i -g install-local aus
  2. Führen Sie npx install-local --save im Ziel-Repository aus, um die lokale Abhängigkeit zu installieren

Weitere Informationen: https://www.npmjs.com/package/install-local

Den Fehler, den ich beim Versuch, das lokale Paket mit npm install --save zu installieren, erhalten habe:

Fehler: Ungültiger Hook-Aufruf. Hooks können nur im Körper einer Funktionskomponente aufgerufen werden. Dies kann aus einem der folgenden Gründe geschehen:

  1. Sie könnten nicht übereinstimmende Versionen von React und dem Renderer (wie React DOM) haben
  2. Sie könnten die Regeln von Hooks verletzen
  3. Möglicherweise haben Sie mehr als eine Kopie von React in derselben App

0voto

Plato Punkte 10230

Wenn es akzeptabel ist, einfach Ihre Module vorinstalliert in node_modules zusammen mit Ihren anderen Dateien zu veröffentlichen, können Sie dies so 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 möchten Ihr Modul möglicherweise auch auf Git speichern und Ihrem übergeordneten package.json mitteilen, die Abhängigkeit von Git zu installieren: https://npmjs.org/doc/json.html#Git-URLs-as-Dependencies

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