J'ai déjà fait pas mal de recherches. Cependant, vous avez toujours des doutes sur le paramètre principal dans package.json de Node.js.
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 que cette application est composée de deux composants principaux. L'une étant une API REST et l'autre étant un service d'envoi de notifications.
Je crains que le processus de livraison de notification ne 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 rapport si les deux composants peuvent servir dans le même rapport si possible.
Toutes les suggestions sont les bienvenues.
De la documentation npm :
Le champ principal est un ID de module qui constitue le point d'entrée principal de votre programme. En d’autres termes, si votre paquet est nommé foo et qu’un utilisateur l’installe, puis requiert ("foo"), l’objet exports de votre module principal sera renvoyé.
Cela devrait être un ID de module relatif à la racine de votre dossier de paquets.
Pour la plupart des modules, il est plus logique d’avoir un script principal et souvent pas grand chose d’autre.
En bref:
main
dans votre package.json
si le point d'entrée de votre package diffère de index.js
dans son dossier racine. Par exemple, les gens placent souvent le point d'entrée sur lib/index.js
ou lib/<packagename>.js
, dans ce cas, le script correspondant doit être décrit comme main
dans package.json
.main
, simplement parce que le point d'entrée require('yourpackagename')
doit être défini sans ambiguïté.Pour 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 de package.json.
Disons que vous avez la structure de fichier suivante:
my-npm-module
|-- lib
| |-- module.js
|-- package.json
Sans paramètre principal dans le package.json, vous devez charger le module en indiquant son point d'entrée: require('my-npm-module/lib/module.js')
.
Si vous définissez le paramètre principal package.json comme suit "main": "lib/module.js"
, vous pourrez charger le module de cette façon: require('my-npm-module')
.
Si vous avez par exemple dans votre fichier package.json
:
{
"name": "zig-zag",
"main": "lib/entry.js",
...
}
lib/entry.js
sera le point d’entrée principal de votre paquet. En appelant
require( 'zig-zag' );
dans le noeud, lib/entry.js
sera le fichier réellement requis.
Une fonction importante de la touche main
est qu'elle fournit le chemin d'accès à votre point d'entrée. Ceci est très utile lorsque vous travaillez avec nodemon
. Si vous travaillez avec nodemon
et que vous définissez la touche main
dans votre package.json
comme on le dit "main": "./src/server/app.js"
, vous pouvez simplement activer le serveur en tapant nodemon
dans la CLI avec la racine sous la forme pwd au lieu denodemon ./src/server/app.js
.
Pour OpenShift, vous ne devez vous lier qu’à une paire de port et IP (par application). Il semble que vous devriez pouvoir desservir les deux services à partir d’une seule instance de nodejs en ajoutant des itinéraires internes pour chaque point de terminaison de service.
J'ai quelques informations sur la manière 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
Pensez-y simplement comme "le point de départ".
Dans le sens de la programmation orientée objet, disons C #, il s’agit de init () ou du constructeur de la classe d’objets, c’est ce que signifie "point d’entrée".
Par exemple
public class IamMain // when export and require this guy
{
public IamMain() // this is "main"
{...}
... // many others such as function, properties, etc.
}