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