Объединение Express 4 и Vue CLI 3

#node.js #express #npm #vue-cli-3

#node.js #экспресс #npm #vue-cli-3

Вопрос:

Я создал проект с использованием Vue CLI 3 и Express 4, и пока все шло гладко, поскольку у меня был внутренний сервер в одной папке, а интерфейс — в другой, но теперь я останавливаюсь, пытаясь развернуть оба на одном узле хостинга. Позвольте мне рассказать немного больше.

Структура моего проекта на данный момент:

 Project:
  - node_modules/
  - package.json

Project/Frontend (Vue CLI 3):
  - node_modules/
  - package.json
  - app.js
  - dist/
  - <other folders like "public","tests","src",etc>        

Project/Backend (Express 4):
  - node_modules/
  - package.json
  - app.js
  - <other folders like "controllers" and stuff>
  

Теперь проблема в том, что мне нужно объединить оба в одном узловом приложении, чтобы развернуть его на хостинговой платформе.

Я бы хотел, чтобы Express (серверная часть) запускала сервер и обслуживала его dist/ из интерфейса, но проблема в том, что выбранная мной служба хостинга работает только npm install в корневой папке, что бесполезно, так как мне нужен пакет «Express» (и некоторые другие) для запуска сервера. Поскольку он не находится в корневой папке, он не устанавливает никаких пакетов и, очевидно, не запускается.

Я создал конфигурацию npm корневого уровня, чтобы попытаться скомпилировать интерфейс, а затем скопировать dist/ в серверную часть Express. Но поскольку служба хостинга не устанавливает ничего, кроме корневой конфигурации npm, cd подключение к интерфейсу и последующая сборка завершаются неудачей, поскольку она пропускает node_modules .

Мне каким-то образом удалось заставить это работать, установив webpack в npm серверной папки, настроив его для объединения приложения Express и скопировав пакет и dist/ из интерфейса в корневую папку проекта, а затем запустив на npm корневого уровня:

 cd frontend amp;amp; npm run build amp;amp; cd ../backend amp;amp; webpack
  

и после этого нажатие root dist/ на службу хостинга, что вроде бы сработало, но это «неудобно» и не оптимально, тем более, что мне нужно каждый раз создавать его на локальном компьютере и только потом загружать. Если бы я каким-то образом мог использовать пакеты корневого npm для создания интерфейса и серверной части на службе хостинга, это было бы здорово, но я считаю, что здесь другой проблемой является управление версиями, поскольку оба будут использовать одни и те же пакеты npm.

Есть ли какое-либо лучшее и / или более чистое решение для этого?

Если какая-либо деталь отсутствует, просто дайте мне знать.

Заранее спасибо за любую помощь.

Ответ №1:

Вам следует попробовать Lerna. Это позволяет вам иметь несколько js-проектов в одном репозитории (или одной папке) с package.json в корневой папке, куда вы можете добавить скрипт для взаимодействия со всем вашим проектом.

Например, вы должны иметь возможность добавить сценарий запуска, который будет помещен в вашу папку differents apps, установить ваши зависимости и запустить / построить этот проект.

Ответ №2:

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

 const resolve = require('path').resolve
const cp = require('child_process')

const frontend = resolve(__dirname, 'Frontend')
const backend = resolve(__dirname, 'Backend')

cp.exec('npm install', { env: process.env, cwd: frontend }, () => {
  cp.exec('npm run build', { env: process.env, cwd: frontend })
})

cp.exec('npm install', { env: process.env, cwd: backend }, () => {
  cp.exec('npm run start', { env: process.env, cwd: backend })
})