Ich habe schon ziemlich viel gesucht. Ich habe jedoch immer noch Zweifel an dem Hauptparameter in package.json von Node.js.
- Wie würde das Ausfüllen dieses Feldes helfen? Kann ich das Modul auf andere Weise in einem anderen Stil starten, wenn dieses Feld angezeigt wird?
- Kann ich mehr als ein Skript in den Hauptparameter einfügen lassen? Wenn ja, würden sie als zwei Threads gestartet? Wenn nein, wie kann ich zwei Skripte in einem Modul starten und parallel ausführen lassen?
Ich weiß, dass die zweite Frage ziemlich seltsam ist. Dies liegt daran, dass ich eine Node.js-Anwendung auf OpenShift gehostet habe, die Anwendung jedoch aus zwei Hauptkomponenten besteht. Eine ist eine REST-API und eine ist ein Benachrichtigungsdienst.
Ich befürchte, dass der Benachrichtigungsübermittlungsprozess die REST-API blockieren würde, wenn sie als einzelner Thread implementiert würden. Sie müssen jedoch eine Verbindung mit derselben MongoDB-Kassette herstellen. Außerdem möchte ich einen Gang sparen, wenn beide Komponenten möglichst im gleichen Gang arbeiten könnten.
Anregungen sind willkommen.
electron
berücksichtigt die Hauptparameter, dhelectron .
startet das Richtige von einem Unterordner aus, wenn es ein z. B. ein"main": "dist/app/index.js",
In gibtpackage.json
(gilt möglicherweise auch für andere Plattformen / Frameworks).You can't have two scripts as main...
- wahr. Wenn Ihr Paket jedoch beispielsweise mehrere CLI-Befehle bereitstellt (während der Entwicklung unter./node_modules/.bin/<symlink>
), überprüfen Sie den Parameter "bin" ..js
hier Erweiterungen, aber "Modul-IDs" haben keine Erweiterungen. Ich mag die Mehrdeutigkeit, die wir verwenden sollen, nichtUm Ihre erste Frage zu beantworten, hängt die Art und Weise, wie Sie ein Modul laden, vom Moduleinstiegspunkt und dem Hauptparameter von package.json ab .
Angenommen, Sie haben die folgende Dateistruktur:
Ohne Hauptparameter in der package.json müssen Sie das Modul laden, indem Sie den Moduleinstiegspunkt angeben :
require('my-npm-module/lib/module.js')
.Wenn Sie den Hauptparameter package.json wie folgt festlegen
"main": "lib/module.js"
, können Sie das Modul folgendermaßen laden :require('my-npm-module')
.quelle
Wenn Sie zum Beispiel in Ihrer
package.json
Datei haben:lib/entry.js
wird der Haupteinstiegspunkt für Ihr Paket sein.Beim Anruf
Im Knoten
lib/entry.js
wird die tatsächliche Datei angezeigt, die erforderlich ist.quelle
Eine wichtige Funktion des
main
Schlüssels besteht darin, dass er den Pfad für Ihren Einstiegspunkt bereitstellt. Dies ist sehr hilfreich bei der Arbeit mitnodemon
. Wenn Sie mit arbeitennodemon
und denmain
Schlüssel in Ihrempackage.json
Beispiel definieren"main": "./src/server/app.js"
, können Sie den Server einfach hochfahren, indem Sienodemon
die CLI mit root als pwd anstelle von eingebennodemon ./src/server/app.js
.quelle
Soweit ich weiß, ist dies der Haupteinstiegspunkt für Ihr Knotenpaket (Bibliothek) für npm. Es wird nur benötigt, wenn Ihr npm-Projekt zu einem Knotenpaket (Bibliothek) wird, das von anderen über npm installiert werden kann.
Angenommen, Sie haben eine Bibliothek mit einem Ordner build /, dist / oder lib /. In diesem Ordner haben Sie die folgende kompilierte Datei für Ihre Bibliothek:
Dann teilen Sie npm in Ihrer package.json mit , wie auf die Bibliothek zugegriffen werden soll (Knotenpaket):
Nach der Installation des Knotenpakets mit npm in Ihrem JS-Projekt können Sie Funktionen aus Ihrer gebündelten Datei bundle.js importieren :
Dies gilt auch, wenn Sie Code Splitting (z. B. Webpack) für Ihre Bibliothek verwenden. Diese webpack.config.js verwendet beispielsweise Code, der das Projekt in mehrere Bundles anstatt in eines aufteilt .
Dennoch würden Sie in Ihrem package.json einen Haupteinstiegspunkt für Ihre Bibliothek definieren :
Wenn Sie dann die Bibliothek verwenden, können Sie Ihre Dateien von Ihrem Haupteinstiegspunkt importieren:
Sie können jedoch auch Bypass - Haupteintrittspunkt aus dem package.json und Import der Code gespaltet Bündel:
Schließlich verweist die Haupteigenschaft in Ihrer package.json nur auf Ihre Haupteinstiegspunktdatei Ihrer Bibliothek.
quelle
Für OpenShift erhalten Sie nur ein PORT- und IP-Paar zum Binden (pro Anwendung). Es hört sich so an, als ob Sie in der Lage sein sollten, beide Dienste von einer einzelnen Knoteninstanz aus zu bedienen, indem Sie interne Routen für jeden Dienstendpunkt hinzufügen.
Ich habe einige Informationen darüber, wie OpenShift die package.json Ihres Projekts verwendet, um Ihre Anwendung hier zu starten: https://www.openshift.com/blogs/run-your-nodejs-projects-on-openshift-in-two-simple-steps #package_json
quelle
Betrachten Sie es einfach als "Ausgangspunkt".
Im Sinne einer objektorientierten Programmierung, sagen wir C #, ist es der init () oder Konstruktor der Objektklasse, was "Einstiegspunkt" bedeutet.
Beispielsweise
quelle