Узел.пакет js.основной параметр json


Я уже сделал довольно некоторый поиск. Однако, все еще есть сомнения по поводу основного параметра в пакете.json узла.js.

  1. как бы заполнение этого поля помогло? Спрашивая по-другому, могу ли я запустить модуль в другом стиле, если это поле представлено?
  2. могу ли я иметь несколько сценариев, заполняемых в основной параметр? Если да, то будут ли они запускаться как два потока? Если нет, то как я могу запустить два скрипта в модуле и запустить их параллельно?

Я знаю, что второй вопрос достаточно странный. Это потому, что я разместил узел.приложение js на OpenShift, но приложение состоит из двух основных компонентов. Один из них-REST API, а другой-служба доставки уведомлений.

Я боюсь, что процесс доставки уведомлений заблокирует REST API, если они будут реализованы как один поток. Однако они должны подключаться к одному и тому же картриджу MongoDB. Кроме того, я хотел бы сохранить одна шестерня, если оба компонента могут служить в одной и той же шестерне, если это возможно.

любые предложения приветствуются.

5 75

5 ответов:

С документация npm:

основное поле-это идентификатор модуля, который является основной точкой входа в ваш программа. То есть, если ваш пакет называется foo, и пользователь устанавливает это, а затем требует ("foo"), то экспорт вашего основного модуля объект будет возвращен.

это должен быть идентификатор модуля относительно корня вашего пакета папка.

для большинства модулей имеет смысл иметь основной сценарий и часто не намного больше.

в общем:

  1. вам нужно только в своем package.json если точка входа в ваш пакет отличается от index.js в корневой папке. Например, люди часто ставят точку входа lib/index.js или lib/<packagename>.js в этом случае соответствующий скрипт должен быть описан как main на package.json.
  2. вы не можете иметь два скрипта как 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