Как упаковать и развернуть Node.js + express веб-приложение?
Я новичок в программировании Node.js, и недавно я создал образец рабочего веб-приложения, используя (экспресс, магистраль и другие бесплатные технологии просмотра, с mongoDB). Теперь я нахожусь в точке, где я хочу развернуть то же самое в промежуточной среде, и я не уверен, как упаковать это приложение и распространять его. [Я могу позаботиться о mongoDb и настроить его отдельно]
Я из мира Java, и там мы создаем банки для многоразовых библиотек и пакетов war/ear для веб-приложений, которые развертываются в контейнере сервлетов. Теперь в этом случае, поскольку Node.js сам действует как веб-контейнер, как я могу упаковать свой webapp?
- Есть ли какой-либо стандартный формат/рекомендации по упаковке node webapps, построенный с использованием express? (Есть ли аналогичные системы упаковки jar/war для приложений node?)
- Как его развернуть после упаковки? Станет ли он exe, поскольку он также является его собственным контейнером?
PS: На данный момент я подумываю просто вручную скопировать все необходимые исходные файлы в промежуточную среду и запустить команды npm для загрузки всех зависимостей на этом компьютере, а затем использовать "навсегда" или какой-либо другой механизм для запуска моего сервера. JS. (Кроме того, добавьте какой-то мониторинг, просто в случае сбоя приложения и навсегда сработает) Я не уверен, что это правильный путь? Я уверен, что должен быть некоторый стандартизированный способ решения этой проблемы.
Ответы
Ответ 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
- Существуют ли какие-либо стандартные форматы/рекомендации для веб-приложений узла упаковки, построенные с использованием 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