Node.js package.json paramètre principal

J'ai déjà fait une bonne recherche. Cependant, tout le doute sur le paramètre principal dans package.json de Node.js.

  1. Comment remplir ce champ? Demander d'une autre manière, puis-je démarrer le module dans un style différent si ce champ se présente?
  2. Puis-je avoir plus d'un script dans le paramètre principal? Si oui, seraient-ils en train de commencer deux fils? Si non, comment puis-je démarrer deux scripts dans un module et les faire fonctionner 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'une étant une API REST et l'une étant un service de livraison de notification.

J'ai eu peur que le processus de livraison des notifications bloquerait l'API REST s'ils étaient implémentés en tant que fil unique. Cependant, ils doivent se connecter à la même cartouche MongoDB. De plus, j'aimerais économiser un équipement si les deux composants pourraient servir dans le même genre si possible.

Toutes les suggestions sont les bienvenues.

À partir de la documentation npm :

Le champ principal est un ID de module qui est le point d'entrée principal de votre programme. C'est-à-dire, si votre paquet est nommé foo, et qu'un utilisateur l'installe, puis exige ("foo"), l'objet exportations de votre module principal sera renvoyé.

Ce doit être une ID de module relative à la racine de votre dossier de package.

Pour la plupart des modules, il est plus logique d'avoir un script principal et souvent pas beaucoup d'autre.

Pour préciser:

  1. Vous n'avez besoin que d'un paramètre main dans votre package.json si le point d'entrée de votre paquetage diffère de index.js dans son dossier racine. Par exemple, les gens mettent souvent le point d'entrée dans lib/index.js ou lib/<packagename>.js , dans ce cas, le script correspondant doit être décrit comme main dans package.json .
  2. Vous ne pouvez pas avoir deux scripts en tant que 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 du 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 le point d'entrée du module: 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') .

Une fonction importante de la clé main est qu'il fournit le chemin pour 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 clé main dans votre package.json , dites "main": "./src/server/app.js" , vous pouvez simplement nodemon le serveur en tapant nodemon dans la CLI avec nodemon ./src/server/app.js comme pwd au lieu de nodemon ./src/server/app.js .

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 colis. En appelant

require( 'zig-zag' );

Dans node, lib/entry.js sera le fichier réel requis.

Pour OpenShift, vous obtenez seulement une paire PORT et IP pour vous lier à (par application). Il semble que vous devriez pouvoir servir les deux services à partir d'une instance de nodejs unique en ajoutant des voies internes pour chaque point de service.

J'ai des 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-staps #package_json