Node.js Основной параметр package.json
Я уже довольно много искал. Однако, все еще сомневаясь в главном параметре в package.json Node.js.
- Как будет заполняться в этом поле? Запрашивая по-другому, могу ли я запустить модуль в другом стиле, если это поле представлено?
- Можно ли добавить в основной параметр более одного скрипта? Если да, будут ли они запускаться как два потока? Если нет, как я могу запустить два сценария в модуле и запустить их параллельно?
Я знаю, что второй вопрос довольно странный. Это связано с тем, что я принял приложение Node.js на OpenShift, но приложение состоит из двух основных компонентов. Один из них - REST API, а один - служба доставки уведомлений.
Я боюсь, что процесс доставки уведомлений заблокировал бы REST API, если бы они были реализованы как один поток. Однако они должны подключаться к одному картриджу MongoDB. Кроме того, я хотел бы сохранить одну передачу, если оба компонента могут служить на одной передаче, если это возможно.
Любые предложения приветствуются.
Ответы
Ответ 1
Из документации npm:
Основное поле - это идентификатор модуля, который является основной точкой входа в ваш программа. То есть, если ваш пакет называется foo, а пользователь устанавливает он, а затем требует ( "foo" ), тогда ваш основной модуль экспортирует объект будет возвращен.
Это должен быть идентификатор модуля относительно корня вашего пакета папку.
Для большинства модулей наиболее целесообразно иметь основной script и часто не намного больше.
Короче говоря:
- Вам нужен только параметр
main
в package.json
, если точка входа в ваш пакет отличается от index.js
в корневой папке. Например, люди часто помещают точку входа в lib/index.js
или lib/<packagename>.js
, в этом случае соответствующий script должен быть описан как main
в package.json
.
- Вы не можете иметь два сценария как
main
, просто потому, что точка входа require('yourpackagename')
должна быть однозначно определена.
Ответ 2
Чтобы ответить на ваш первый вопрос, способ загрузки модуля зависит от точки входа модуля и основного параметра package.json.
Скажем, у вас есть следующая файловая структура:
my-npm-module
|-- lib
| |-- module.js
|-- package.json
Без основного параметра в package.json вам необходимо загрузить модуль, указав точку входа модуля: require('my-npm-module/lib/module.js')
.
Если вы установите основной параметр package.json следующим образом "main": "lib/module.js"
, вы сможете загрузить модуль следующим образом: require('my-npm-module')
.
Ответ 3
Если у вас есть, например, файл package.json
:
{
"name": "zig-zag",
"main": "lib/entry.js",
...
}
lib/entry.js
будет основной точкой входа в ваш пакет.
При вызове
require( 'zig-zag' );
в node, lib/entry.js
будет фактическим файлом, который требуется.
Ответ 4
Одна важная функция ключа main
заключается в том, что она предоставляет путь для вашей точки входа. Это очень полезно при работе с nodemon
. Если вы работаете с nodemon
и вы определяете ключ main
в package.json
, как можно сказать "main": "./src/server/app.js"
, то вы можете просто запустить сервер с вводом nodemon
в CLI с корнем в качестве pwd вместо nodemon ./src/server/app.js
.
Ответ 5
Для OpenShift вы получаете только одну пару PORT и IP для привязки (для каждого приложения). Похоже, вы должны иметь возможность обслуживать обе службы из одного экземпляра nodejs, добавляя внутренние маршруты для каждой конечной точки обслуживания.
У меня есть информация о том, как OpenShift использует ваш проект package.json для запуска вашего приложения здесь: https://www.openshift.com/blogs/run-your-nodejs-projects-on-openshift-in-two-simple-steps#package_json