web-dev-qa-db-de.com

Bewährte Methode für die Bereitstellung von nodejs - Direktes Verschieben von node_modules auf den Server oder Ausführen des Befehls npm install

Was ist die bewährte Methode für die Bereitstellung einer nodejs-Anwendung?

1) Direktes Verschieben der Ordner "node_modules" vom Entwicklungsserver auf den Produktionsserver, sodass dieselbe lokale Umgebung auch in der Produktion erstellt werden kann. Alle Änderungen, die an einem der Knotenmodule entfernt vorgenommen werden, wirken sich nicht auf unseren Code aus.

2) Führen Sie den Befehl npm install auf dem Produktionsserver mit Hilfe von package.json aus. Hier besteht das Problem, alle Änderungen an den Knotenmodulen wirken sich auf unseren Code aus. Ich habe einige Probleme mit dem Loopback-Modul ( issue link ). 

Kann mir jemand helfen?

4

Das Ausführen von npm install auf einem Produktionsserver kann in bestimmten Szenarien nicht ausgeführt werden (fehlende Kompilierungswerkzeuge, eingeschränkter Internetzugang usw.). Wenn Sie dasselbe Projekt auf mehreren Computern bereitstellen müssen, kann dies zu einer Verschwendung von CPU, Speicher und Bandbreite führen .

Sie sollten npm install --production auf einem Computer mit denselben Bibliotheken und derselben Knotenversion des Produktionsservers ausführen, node_modules komprimieren und auf dem Produktionsserver bereitstellen. Sie sollten auch die package-lock.json-Datei beibehalten, um Versionen zu lokalisieren.

Mit diesem Ansatz können Sie Ihren Code auch mithilfe von Entwicklungspaketen erstellen/testen und dann die node_modules vor der eigentlichen Bereitstellung bereinigen.

5
DBellavista

Meine Vermutung ist, dass Sie mit dieser Frage den Punkt der package.json-Datei nicht wirklich verstehen.

Die package.json-Datei ist explizit für diesen Zweck gedacht (dh beim Hochladen in die npm-Registry), die Übertragung eines Knotenpakets, ohne dass die beträchtliche Anzahl von Abhängigkeiten mit übertragen werden muss.

Ich würde so weit gehen zu sagen, dass man das node_modules-Verzeichnis überhaupt niemals manuell verschieben sollte.

Verwenden Sie auf jeden Fall den Befehl npm install auf Ihrem Produktionsserver. Dies ist der richtige Weg. Verwenden Sie die Datei node_modules, um Änderungen am Verzeichnis package lock im Vergleich zu Ihrer lokalen Umgebung zu vermeiden. Das sollte helfen, Änderungen am Quellcode in node_modules zu minimieren.

Ich meine damit keine schlechte Absicht

2
harryparkdotio
  • Das Verschieben des node_modules-Ordners ist zu hoch. 
  • Das Ausführen von npm install kann die Versionsabhängigkeiten zerstören. 
  • Der beste Ansatz ist npm ci. Es verwendet die package_lock-Datei und installiert die erforderlichen Abhängigkeiten, ohne die Versionen zu ändern. Npm ci ist für kontinuierliche Integrationsprojekte gedacht. VERKNÜPFUNG
1
Raj Sahoo

Auf jeden Fall npm install. Sie sollten dies jedoch nicht selbst tun, wenn Sie Ihre App bereitstellen möchten.

Verwenden Sie dazu das Tool wie PM2 .

In Bezug auf Ihre Bedenken hinsichtlich Änderungen in Paketen lautet die Kurzantwort package-lock.json.

1
tniezurawski

Ich bin ein ASP.NET Core-Entwickler, habe jedoch vor kurzem mit Node.js-Apps gearbeitet. Für mich war dies eine der Herausforderungen, die Sie angesprochen haben, um den Ordner node_modules in die Produktion zu verschieben. Anstatt den gesamten Ordner in die Produktion zu verschieben oder nur den Befehl npm install auf dem Produktionsserver auszuführen, habe ich es herausgefunden und versucht, meine Node.js-App mithilfe von Webpack in einem einzigen/mehreren Bundles zu bündeln, und ich habe das Chaos einfach los node_modules Ordner verwalten. Es nimmt nur die erforderlichen node_modules-Pakete auf, die in meiner App verwendet/referenziert werden, und bündelt zusammen mit meinem App-Code eine einzige Datei. Ich setze diese einzelne Datei für die Produktion aus, ohne den gesamten node_modules-Ordner zu verschieben.

Ich habe diese Vorgehensweise in meinem Fall als nützlich erachtet, aber bitte schlagen Sie mir vor, wenn dies in Bezug auf die Leistung der App nicht der richtige Weg ist oder wenn dies Nachteile mit sich bringt.

0
Ali Shahzad