** См. РЕДАКТИРОВАТЬ ниже **
Я создал простое приложение MERN (Mongo, Express, React, NodeJS) для формирования основы проекта. Я изучаю возможные способы создания исполняемых файлов для развертывания после завершения приложения. Исполняемые файлы должны быть созданы для нескольких операционных систем и архитектур.
Приложение соответствует серверной части NodeJS, на которой запущен веб-сервер Express с доступом к экземпляру MongoDB (на самом деле это NeDB, но я просто назвал его Mongo для простоты), а интерфейс создается с помощью React.
Я пытался использовать PKG и кратко рассмотрел nexe , и похоже, что любой из этих инструментов должен дать мне решение.
Однако из-за файловой структуры моего проекта у меня возникли некоторые проблемы. Моя структура папок для моего приложения выглядит следующим образом:
/
/server
....<express files>
....package.json
/client
....<react files>
....package.json
package.json
Причина такой структуры папок заключается в том, что мое приложение может запускать как серверные, так и клиентские приложения, запустив npm start
из корневого каталога. Это делается с помощью файла package.json
корневой папки, который имеет следующее содержимое:
{
"name": "MyApplication",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"client": "cd client && npm start",
"server": "cd server && npm start",
"start": "concurrently \"npm run server\" \"npm run client\" --kill-others"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"concurrently": "3.5.1"
},
"pkg": {
"assets": [
"client/*",
"server/*"
]
}
}
По сути, я пытаюсь создать исполняемый файл, который имитирует поведение при запуске npm start
в корне. Исполняемый файл должен запускать внутренние службы в каталоге server
, а также должен выполнять код React в каталоге client
.
Как видите, я пытался добавить некоторые параметры в pkg
, но это не похоже на работу.
Есть ли способ настроить PKG или любой другой подобный инструмент для получения того, что я ищу? Или мне нужно будет иметь отдельный исполняемый файл для сервера и клиента? В идеале я бы просто хотел один файл.
Заранее спасибо.
** РЕДАКТИРОВАТЬ **
Я столкнулся со следующим стандартным приложением, которое, по сути, достигает того, что я ищу: https://github.com/crsandeep/simple-react-full-stack
Однако я изо всех сил пытаюсь заставить его работать с PKG. Я смог успешно сгенерировать файл .exe
, но, к сожалению, когда я загружаю корневую страницу в браузер (localhost: 8080), он выдает сообщение об ошибке Cannot GET /
, но пример вызова API работает нормально.
Полагаю, это из-за того, что в моем файле package.json
чего-то не хватает, но я не могу решить это. Без запуска приложения с использованием PKG все работает нормально.
Вот дополнения к package.json
файлу, который я сделал:
"pkg": {
"scripts": "./dist/bundle.js",
"assets": [
"./dist/index.html",
"./dist/favicon.ico"
]
},
"bin": "src/server/index.js"
Затем я запускаю PKG со следующим оператором (из того же каталога, что и package.json
)
pkg . --target node10-win-x64 --out-dir ../
Я пробовал много разных комбинаций предметов в package.json
, но, похоже, я не могу понять это правильно.
У кого-нибудь есть решение для этого?