Private Module der Node.js-App. Wo soll man sie hinstellen?

8

Die Situation wäre:

Ich entwickle 2 Projekte in meiner Node.js-Entwicklungsumgebung, P1 und P2.

P1 erforderte die Entwicklung von zwei einfachen Modulen, mod1 und mod2, die in gespeichert sind P1/lib. Jedes dieser Module löst seine externen Abhängigkeiten in P1/node_modules. Notwendige Abhängigkeiten für P1 wurden über npm in diesem Ordner installiert.

Jetzt wollen wir mod1 in dem anderen Projekt P2 wiederverwenden. Hier sind meine Zweifel aufgetaucht. Ich könnte ...

  • Kopiere einfach mod1 nach P2/lib. Replikation, daher denke ich nicht einmal über diese Option nach.

  • Von P2 Referenzmod1 von P1 : require($PROJECTS_DIR + '/P1/lib/mod1'). Keine gute Option, auf diese Weise würde P2 von P1 abhängen.

  • Legen Sie mod1 in ein übergeordnetes Verzeichnis oder verwenden Sie NODE_PATH, damit P1 und P2 es einfach durch doint auflösen können require('mod1'). Bei der Bereitstellung sollte ich jedoch auch dieses übergeordnete Verzeichnis bereitstellen, das etwas schmutzig erscheint.

  • Ich möchte mod1 als npm-Modul behandeln, damit es problemlos in jedem Projekt oder jeder Umgebung installiert werden kann. In diesem speziellen Fall kann ich das Modul jedoch nicht in npm veröffentlichen, da es zu projektspezifisch ist. Ich könnte ein privates npm-Repository erstellen und mod1 hineinstecken. Das Wesentliche dabei wäre, es so einzurichten, dass auch aus der Produktionsumgebung heraus darauf zugegriffen werden kann. Lohnt es sich?

  • Was ist mit dem Zusammenfügen node_modules? (externe Abhängigkeiten und meine eigenen Bibliotheken). Das wäre großartig, da Module wie "require" ("module") nur benötigt werden können. Aber es scheint auch ziemlich schmutzig.

  • Ich bin mir nicht sicher, wie npm linkes bei der Bereitstellung funktionieren würde. Es wird ein symbolischer Link erstellt, dem beim Festschreiben von Code über Git oder SVN nicht gefolgt wird. Wenn ich npm installin der Produktion laufe , wird dann auch das verknüpfte Modul installiert?

Keines der oben genannten befriedigt mich ganz. Ich weiß nicht, ob eine davon geeignet ist, oder Sie haben andere Vorschläge, aber gibt es bevorzugte Möglichkeiten, eigene private Bibliotheken so zu strukturieren , dass sie problemlos in anderen Projekten wiederverwendet werden können?

jaime
quelle

Antworten:

6

Verwenden Sie npm link. Es ermöglicht Ihnen, ein Modul zu haben, wo immer Sie möchten, und Sie können es dann in Ihrem Projekt "verknüpfen" (ein symbolischer Link wird in Ihrem node_modules / Ordner erstellt), sodass Sie es mit verwenden können require('mod1'). Ihr Modul muss npm-kompatibel sein.

Weitere Informationen finden Sie hier: https://docs.npmjs.com/cli/link

Über Ihre privaten Anliegen hat npm darüber nachgedacht und bietet die privateOption. Siehe hier: https://docs.npmjs.com/misc/registry (Gehen Sie zu: "Ich möchte nicht, dass mein Paket in der offiziellen Registrierung veröffentlicht wird. Es ist privat.")

Für jede Modulabhängigkeit können Sie sie einfach in der package.json definieren.

Florian Margaine
quelle
Danke Florian, wenn ich Änderungen über svn oder git festschreibe, werden keine Symlinks verfolgt. Bedeutet das, dass ich npm linkauch in der Produktionsumgebung verwenden müsste ? Oder ist es implizit in. npm installGibt es Möglichkeiten, es in package.json anzugeben?
Jaime
@jaime git und svn folgen symlinks.
Florian Margaine
In Produktionsumgebungen würde ich jedoch ein Skript ausführen, um die Module im Ordner node_modules / zu verpacken.
Florian Margaine
@jaime Sie müssen nur npm linkbei der Entwicklung verwenden.
Daniel
docs.npmjs.com/… - 404's. Aber der beste Weg, Dinge privat zu halten, besteht darin, sie nicht im Internet zu veröffentlichen. Es hört sich so an, als wäre Link auch die beste Option ... außer auch npmjs.org/doc/link.html 404. Ich muss Link Rot lieben.
Pat