J'ai déjà fait pas mal de recherches. Cependant, j'ai toujours des doutes sur le paramètre principal de package.json de Node.js.
- Comment le remplissage de ce champ aiderait-il? En demandant d'une autre manière, puis-je démarrer le module dans un style différent si ce champ est présent?
- Puis-je avoir plusieurs scripts remplis dans le paramètre principal? Si oui, seraient-ils lancés comme deux fils? Si non, comment puis-je démarrer deux scripts dans un module et les faire exécuter en parallèle?
Je sais que la deuxième question est assez étrange. C'est parce que j'ai hébergé une application Node.js sur OpenShift mais l'application se compose de deux composants principaux. L'un étant une API REST et l'autre un service de notification.
J'ai peur que le processus de livraison de notification bloque l'API REST si elles étaient implémentées en tant que thread unique. Cependant, ils doivent se connecter à la même cartouche MongoDB. De plus, je voudrais économiser un engrenage si les deux composants pouvaient servir dans le même engrenage si possible.
Toutes les suggestions sont les bienvenues.
electron
honore les paramètres principaux, c'est-àelectron .
- dire démarre la bonne chose à partir d'un sous-dossier, s'il y a un par exemple un"main": "dist/app/index.js",
inpackage.json
(cela peut aussi être vrai pour d'autres plates-formes / frameworks).You can't have two scripts as main...
- vrai. Cependant, si votre package fournit par exemple plusieurs commandes CLI (pendant le développement accessible sous./node_modules/.bin/<symlink>
) vérifiez le paramètre "bin" ..js
extensions ici, mais les "identificateurs de module" n'ont pas d'extensions .. je n'aime pas l'ambiguïté à propos de laquelle nous sommes censés utiliserPour répondre à votre première question, la façon dont vous chargez un module dépend du point d'entrée du module et du paramètre principal du package.json .
Disons que vous avez la structure de fichiers suivante:
Sans paramètre principal dans le package.json , vous devez charger le module en donnant le point d'entrée du module:
require('my-npm-module/lib/module.js')
.Si vous définissez le package.json paramètre principal comme suit
"main": "lib/module.js"
, vous serez en mesure de charger le module ainsi:require('my-npm-module')
.la source
Si vous avez par exemple dans votre
package.json
dossier:lib/entry.js
sera le principal point d'entrée de votre colis.Lors de l'appel
dans node,
lib/entry.js
sera le fichier réel requis.la source
Une fonction importante de la
main
clé est qu'elle fournit le chemin de votre point d'entrée. Ceci est très utile lorsque vous travaillez avecnodemon
. Si vous travaillez avecnodemon
et que vous définissez lamain
clé dans votrepackage.json
comme disons"main": "./src/server/app.js"
, vous pouvez simplement lancer le serveur en tapantnodemon
dans la CLI avec root comme pwd au lieu denodemon ./src/server/app.js
.la source
Autant que je sache, c'est le point d'entrée principal de votre package de nœuds (bibliothèque) pour npm. Ce n'est nécessaire que si votre projet npm devient un package de nœuds (bibliothèque) qui peut être installé via npm par d'autres.
Disons que vous avez une bibliothèque avec un dossier build /, dist / ou lib /. Dans ce dossier, vous avez le fichier compilé suivant pour votre bibliothèque:
Ensuite, dans votre package.json , vous indiquez à npm comment accéder à la bibliothèque (package de nœuds):
Après avoir installé le package de nœuds avec npm dans votre projet JS, vous pouvez importer des fonctionnalités à partir de votre fichier bundle.js fourni :
Cela est également vrai lorsque vous utilisez le partage de code (par exemple, Webpack) pour votre bibliothèque. Par exemple, ce webpack.config.js utilise du code divisant le projet en plusieurs bundles au lieu d'un.
Néanmoins, vous définiriez un point d'entrée principal vers votre bibliothèque dans votre package.json :
Ensuite, lors de l'utilisation de la bibliothèque, vous pouvez importer vos fichiers depuis votre point d'entrée principal:
Cependant, vous pouvez également contourner le point d'entrée principal du package.json et importer les bundles fractionnés de code:
Après tout, la propriété principale de votre package.json pointe uniquement vers votre fichier de point d'entrée principal de votre bibliothèque.
la source
Pour OpenShift, vous n'obtenez qu'une seule paire PORT et IP à laquelle se lier (par application). Il semble que vous devriez être en mesure de servir les deux services à partir d'une seule instance de nodejs en ajoutant des routes internes pour chaque point de terminaison de service.
J'ai quelques informations sur la façon dont OpenShift utilise le package.json de votre projet pour démarrer votre application ici: https://www.openshift.com/blogs/run-your-nodejs-projects-on-openshift-in-two-simple-steps #package_json
la source
Pensez-y simplement comme le "point de départ".
Dans un sens de la programmation orientée objet, disons C #, c'est l'init () ou le constructeur de la classe d'objets, c'est ce que signifiait «point d'entrée».
Par exemple
la source