Подтвердить что ты не робот

Как упаковать и развернуть Node.js + express веб-приложение?

Я новичок в программировании Node.js, и недавно я создал образец рабочего веб-приложения, используя (экспресс, магистраль и другие бесплатные технологии просмотра, с mongoDB). Теперь я нахожусь в точке, где я хочу развернуть то же самое в промежуточной среде, и я не уверен, как упаковать это приложение и распространять его. [Я могу позаботиться о mongoDb и настроить его отдельно]

Я из мира Java, и там мы создаем банки для многоразовых библиотек и пакетов war/ear для веб-приложений, которые развертываются в контейнере сервлетов. Теперь в этом случае, поскольку Node.js сам действует как веб-контейнер, как я могу упаковать свой webapp?

  • Есть ли какой-либо стандартный формат/рекомендации по упаковке node webapps, построенный с использованием express? (Есть ли аналогичные системы упаковки jar/war для приложений node?)
  • Как его развернуть после упаковки? Станет ли он exe, поскольку он также является его собственным контейнером?

PS: На данный момент я подумываю просто вручную скопировать все необходимые исходные файлы в промежуточную среду и запустить команды npm для загрузки всех зависимостей на этом компьютере, а затем использовать "навсегда" или какой-либо другой механизм для запуска моего сервера. JS. (Кроме того, добавьте какой-то мониторинг, просто в случае сбоя приложения и навсегда сработает) Я не уверен, что это правильный путь? Я уверен, что должен быть некоторый стандартизированный способ решения этой проблемы.

4b9b3361

Ответ 1

Нет стандартизованного способа, но вы на правильном пути. Если ваш package.json обновлен и ухожен, вы можете просто скопировать/zip/клонировать каталог вашего приложения в производственную систему, исключая node_modules.

В вашей производственной системе запустите npm install, чтобы установить ваши зависимости, npm test, если у вас есть тесты и, наконец, NODE_ENV=production node server.js

Некоторые недавние слайды, которые я считал весьма полезными, также включают тему оберток, как навсегда, можно найти здесь.

Ответ 2

Развертывание приложений Node.js очень просто. В maven существует pom.xml. Связанная концепция в Node.js - package.json. Вы можете указать свои зависимости на package.json. Вы также можете выполнить настройку среды package.json. Например, в среде dev вы можете сказать, что

Я хочу запустить модульные тесты.

но в производстве;

Я хочу пропустить модульные тесты.

У вас есть локальные репозитории для maven в папке .m2. В Node.js есть папка node_modules в вашем проекте Node.js. Вы можете видеть папки модулей с их именем.

Перейдем к части ответа grunt. grunt - это диспетчер задач для ваших интерфейсных активов, html, javascript, css. Например, перед развертыванием вы можете минимизировать html, css, javascript четные изображения. Вы также можете поместить функции запуска grunt в package.json.

Если вы хотите посмотреть пример приложения, вы можете найти пример приложения для блога здесь. Проверьте структуру папок и package.json для справки.

Для развертывания я предлагаю вам развертывание героя для запуска приложений. Вы можете найти здесь здесь. Это простое развертывание на основе git.

В рабочей части проекта просто установите среду NODE_ENV=development и node app.js. Здесь app.js находится в вашем проекте.

Вот относительное понятие для java и nodejs;

  • maven clean install = > npm install
  • .m2 folder = > node_modules (в папке проекта)
  • mvn test = > npm test (раздел теста package.json)
  • junit, powermock,... = > mocha, node -unit,...
  • Spring MVC = > Express.JS
  • pom.xml = > package.json
  • import package = > require('module_name')

Ответ 3

  1. Существуют ли какие-либо стандартные форматы/рекомендации для веб-приложений узла упаковки, построенные с использованием Express? (Существуют ли подобные системы упаковки jar/war для узловых приложений?)

Да, спецификация пакетов CommonJS:

Эта спецификация описывает формат пакета CommonJS для распространения программ и библиотек CommonJS. Пакет CommonJS - это связное объединение коллекции модулей, кода и других ресурсов в единую форму. Это обеспечивает основу для удобной доставки, установки и управления компонентами CommonJS.

Для вашего следующего вопроса:

2. Как развернуть его после упаковки? Станет ли он exe, так как это также его собственный контейнер?

Второе предложение Hüseyin о развертывании на Heroku для производства. Для разработки и постановки я использую Node-Appliance с VirtualBox и Amazon EC2 соответственно:

Эта программа использует компьютер Debian, созданный с помощью build-debian-cloud или Debian-VirtualBox-Appliance, и превращает его в "устройство" Node.js, способное запускать приложение Node, развернутое с помощью git.

Ваше веб-приложение не станет exe.

Ответ 4

Надеюсь, что это может быть полезно для тех, кто ищет решение, Упаковка приложений Node js может быть выполнена с помощью команды "npm pack". Она создает ZIP файл вашего приложения, который можно запустить в рабочей/промежуточной среде.

Ответ 5

несколько способов приблизиться к этому:

  • Направьте свой код в репозиторий Git, исключая все, что не является вашим кодом (node_modules/**), затем потяните его в промежуточную среду, запустите npm install, чтобы восстановить все зависимости

  • создать из него пакет NPM, установить его через npm в вашей промежуточной среде (это также должно заботиться обо всех зависимостях)

  • файлы ручной копии /ssh в вашу промежуточную среду (это может быть автоматизировано с помощью Grunt), чем восстановление ваших зависимостей через npm

Ответ 6

Я использовал модуль Zeit PKG. Он может создавать кроссплатформенные результаты для linux/win/macos. На самом деле используется в производстве и прекрасно работает без каких-либо проблем.

Он принимает все js-скрипты и упаковывает их в один файл.

Я использовал его потому, что он помогает защитить ваш исходный код. Таким образом, в производственной среде у клиентов будет доступ к приложению, но не к исходному коду.

Также одним из преимуществ является то, что в производственной среде вам не нужно, чтобы клиент устанавливал node.js, поскольку двоичные файлы узла также упаковываются внутри сборки.

https://www.npmjs.com/package/pkg