Развертывание/запуск: локальный веб-сервер Express и локальное угловое приложение на стороне клиента, которое отправляет запросы ajax на этот локальный веб-сервер.

У меня есть:

  1. веб-сервер на базе Node Express, который должен работать только на локальном компьютере пользователя.
  2. клиентское приложение angular, которое отправляет запросы GET Http на этот локальный веб-сервер, чтобы получить данные в формате JSON и отобразить их в браузере.

В моей среде разработки я запускаю их следующим образом:

  1. npm run dev (в каталоге экспресс-веб-сервера). Выдает: "Экспресс-сервер прослушивает порт 7000" и готов принимать запросы
  2. npm start (в каталоге клиентского приложения). Это запускает клиентское приложение в браузере. Затем я могу печатать, нажимать кнопки и отображать данные (с веб-сервера).

Я хочу предоставить эту систему конечному пользователю в удобном для него виде:

  1. Целевая среда — Windows. В идеале они должны запускать одну установку (например, из файла .msi).
  2. Когда установка будет завершена, они смогут запустить систему (как веб-сервер, так и клиентское приложение) с помощью одной команды.
  3. Конечный пользователь не должен ничего знать об узле, npm, .. и т. д., а также не должен знать домашние каталоги двух компонентов — на самом деле он может даже не знать, что используется локальный экспресс-веб-сервер.

Важна не только удобная установка, но и возможность запуска обоих компонентов системы одной пользовательской командой. Когда пользователь закрывает клиентское приложение, в идеале экспресс-веб-сервер также должен быть закрыт.

Я играл с electron.js, но, похоже, он не развернет и не запустит экспресс-сервер, который необходим электронное приложение. Также читайте о nw.js, но не видели ни одного примера, похожего на мой сценарий.

Я знаю, что может быть??? Я могу реализовать серверную часть как один из процессов электронного рендеринга и вместо HTTP использовать межпроцессное взаимодействие (IPC) для связи с клиентским приложением (другой процесс рендеринга), в котором задействован основной процесс. Однако для этого потребовалась бы существенная переработка уже существующей системы, что потребовало бы значительного времени и в настоящее время недоступно.

Возможен ли сценарий развертывания и использования (1, 2, 3 выше) и какие инструменты лучше всего использовать для реализации такого сценария развертывания и выполнения?

Не могли бы вы предоставить ссылки на любые такие реализации? И/или идеально небольшие/полные примеры кода?


person Dimitre Novatchev    schedule 18.04.2020    source источник
comment
Нужно ли запускать локальный экспресс-сервер? Держите сервер отдельно от электрона. Не объединяйте это вместе. Таким образом, ваш процесс рендеринга может отправить запрос на сервер   -  person namila007    schedule 19.04.2020
comment
@namila007, Да, экспресс-сервер используется только на локальной машине. Как я могу дать пользователю один единственный установочный пакет, который установит локальный веб-сервер Express и клиентское приложение. И как тогда у нас может быть одна команда, которая запускает сначала сервер Express, а затем клиентское приложение? Каков наилучший способ сделать такую ​​​​компактную установку и вызов?   -  person Dimitre Novatchev    schedule 19.04.2020
comment
@namila007, Причина локального экспресс-сервера в том, что в системе используется компонент, который не может работать под браузером (кукловод), и этот компонент предоставляет данные, которые клиентское (браузерное) приложение отображает пользователю. Требуется только локальная установка для отдельных пользователей и отсутствие необходимости поддерживать удаленный/центральный веб-сайт.   -  person Dimitre Novatchev    schedule 19.04.2020
comment
чтобы запустить экспресс-сервер, вы можете запустить start express с помощью spawning a child-process из своего электронного приложения. поэтому пользователю не нужно управлять экспрессом. как только сервер будет ok, приложение должно продолжить и работать nodejs.org/api/   -  person namila007    schedule 20.04.2020
comment
@ namila007, спасибо. Как вы думаете, может ли puppeteer работать в дочернем процессе рендеринга Electron (не в основном процессе)? Потому что на самом деле кукловод должен уметь делать то, что нельзя сделать в обычном браузере. Например, он сам запускает Chrome для собственного использования.   -  person Dimitre Novatchev    schedule 20.04.2020
comment
лучше запустить pupperteer в основном процессе. проверьте это › github.com/puppeteer/puppeteer/issues/ и другие комментарии. вы найдете много полезных ресурсов   -  person namila007    schedule 20.04.2020
comment
Спасибо @namila007. Это очень полезно. Если вы опубликуете ответ со всей этой информацией, я приму его. Спасибо еще раз.   -  person Dimitre Novatchev    schedule 20.04.2020
comment
обязательно добавлю :)   -  person namila007    schedule 20.04.2020


Ответы (1)


Да, ты можешь сделать это. Вы можете упаковать как электронное приложение, так и экспресс-сервер в производство. При разработке вам необходимо разработать экспресс-приложение и выполнить его с помощью модуля nodejs child-process. Здесь вы можете использовать команду exec или spawn команда (я предпочитаю exec, прост в использовании). Вы можете запустить экспресс-процесс из вашего электронного main процесса. Дождитесь экспресс-настройки сервера, а затем продолжайте работу с приложением.

А для кукольника я предлагаю вам взглянуть на эту ветку github . Они предлагают выполнить puppeteer на main process и передать процессы main и renderer через electron IPC< /а>

Я думаю, что для сборки установщика Windows лучше использовать electron-builder и сгенерировать установщик nsis с подписанным сертификатом

person namila007    schedule 20.04.2020