javascript - create - node js rest client promise
ParĂ¡metro principal de Node.js package.json (5)
Ya hice bastante búsqueda. Sin embargo, todavía tengo dudas sobre el parámetro principal en package.json de Node.js.
- ¿Cómo ayuda el llenado en este campo? Preguntando de otra manera, ¿puedo comenzar el módulo con un estilo diferente si este campo se presenta?
- ¿Puedo tener más de un script en el parámetro principal? En caso afirmativo, ¿comenzarían como dos hilos? Si no, ¿cómo puedo iniciar dos scripts en un módulo y hacer que se ejecuten en paralelo?
Sé que la segunda pregunta es bastante extraña. Es porque he alojado una aplicación Node.js en OpenShift pero la aplicación consta de dos componentes principales. Una es una API REST y otra es un servicio de entrega de notificaciones.
Me temo que el proceso de entrega de notificaciones bloquearía la API REST si se implementaran como un solo hilo. Sin embargo, tienen que conectarse al mismo cartucho MongoDB. Además, me gustaría guardar una marcha si, de ser posible, los dos componentes podrían servir con la misma marcha.
Cualquier sugerencia es bienvenida.
De la documentación npm :
El campo principal es un ID de módulo que es el punto de entrada principal para su programa. Es decir, si su paquete se llama foo, y un usuario lo instala, y luego requiere ("foo"), se devolverá el objeto de exportación de su módulo principal.
Esto debería ser un ID de módulo relativo a la raíz de su carpeta de paquete.
Para la mayoría de los módulos, tiene más sentido tener un script principal y, a menudo, no mucho más.
Para decirlo brevemente:
- Solo necesita un parámetro
main
en supackage.json
si el punto de entrada a su paquete difiere deindex.js
en su carpeta raíz. Por ejemplo, las personas a menudo ponen el punto de entrada enlib/index.js
olib/<packagename>.js
, en este caso el script correspondiente debe describirse comomain
enpackage.json
. - No puede tener dos scripts como
main
, simplemente porque el punto de entradarequire(''yourpackagename'')
debe definirse sin ambigüedades.
Para OpenShift, solo obtiene un par de puertos e IP para enlazar (por aplicación). Parece que debe poder servir ambos servicios desde una única instancia de nodo añadiendo rutas internas para cada extremo de servicio.
Tengo información sobre cómo OpenShift usa el paquete de tu proyecto .json para iniciar tu aplicación aquí: https://www.openshift.com/blogs/run-your-nodejs-projects-on-openshift-in-two-simple-steps#package_json
Para responder a su primera pregunta, la forma de cargar un módulo depende del punto de entrada del módulo y del parámetro principal del paquete.json .
Supongamos que tiene la siguiente estructura de archivos:
my-npm-module
|-- lib
| |-- module.js
|-- package.json
Sin el parámetro principal en el paquete.json , debe cargar el módulo dando el punto de entrada del módulo: require(''my-npm-module/lib/module.js'')
.
Si configura el parámetro principal package.json como sigue "main": "lib/module.js"
, podrá cargar el módulo de esta manera: require(''my-npm-module'')
.
Si tiene, por ejemplo, en su archivo package.json
:
{
"name": "zig-zag",
"main": "lib/entry.js",
...
}
lib/entry.js
será el principal punto de entrada a su paquete. Cuando llamas
require( ''zig-zag'' );
en el nodo, lib/entry.js
será el archivo real que se requiere.
Una función importante de la clave main
es que proporciona la ruta para su punto de entrada. Esto es muy útil cuando se trabaja con nodemon
. Si trabajas con nodemon
y defines la clave main
en tu package.json
como digamos "main": "./src/server/app.js"
, entonces simplemente puedes subir el servidor al tipear nodemon
en la CLI con root como pwd en lugar de nodemon ./src/server/app.js
.