Skip to content

mrakobes-ice/SimpleWebApp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simple Express Web App with Webpack & Hot-Controller-Replacment

Packages (frontend):

  • axios

Packages (backend):

  • express
  • serve-favicon

Dev dependencies:

  • webpack

  • webpack-cli

  • webpack-dev-middleware

  • webpack-dev-server

  • webpack-hot-middleware

  • webpack-merge

  • @babel/core

  • @babel/preset-env

  • @babel-loader

  • @babel-watch

  • css-loader

  • mini-css-extract-plugin

  • remove-files-webpack-plugin

Description:

Это простая реализация веб-приложения основанного на Express и Webpack. Код клиентсвой и серверной части разделен (в корне репозитория можно найти каталоги "backend" и "frontend").

Бэкенд веб-приложения описывается в виде "контроллеров" (содержащих обработчики запросов), причем здесь реализована поддержка "горячей замены" контроллеров во время разработки (т.е. изменение в файле контроллера приводит к удалению старого экземпляра контроллера из веб-сервера, и подключение нового - примерно также, как это делает Webpack).

Запуск:

_> npm start

Сборка:

_> npm build

Веб-сервер состоит из:

  • backend/WebServer.js
  • backend/core/controller.js
  • backend/core/controller-proxy.js

Данние файлы не желательно изменять (разве только "controller.js"). Файл "controller-proxy.js" содержит реализацию ControllerProxy - сущности, за счет которой возможна "горячая подмена" контроллеров в Express. ControllerProxy играет роль посредника между Express и экземпляром контроллера (т.к. Express не умеет выгружать свои роутеры).

Файл "controller.js" содержит базовый класс для всех "контроллеров". Controller является особой фабрикой экземляров "Router" - эти экземпляры содержат свойство "mountUrl" в которое при создании Controller нужно передать некоторый "Base URL", который будет обрабатываться контроллером (этот параметр также используется для связывания контроллера с его прокси).

Примечание:

Когда изменяется файл контроллера (в т.ч. mountURL), то новый экземпляр контроллера передается в ControllerProxy...
Как было сказано, Express не умеет выгружать свои Middleware - по этому, в случае удаления контроллера, в его ControllerProxy передается "заглушка" (EmptyController).
Иными словами, при удалении контроллера остаются неиспользуемые "точки входа" (но они могут быть снова задействованы, если создать контроллер с тем-же "mountUrl").	

Основная логика бэкенда должна быть сосредоточена в реализациях "контроллеров" (они-же Express Router) - размещаются в каталоге "backend/controllers/". Логика взаимодействия со внешними сервисами (например, обработка файлов, запросы к БД и т.п.), желательно, должна выноситься в отдельные классы - сервисы (в каталоге "backend/services/"). Более общая логика может размещаться в классах, в каталоге "backend/core/".

Особых ограничений на структуру фронтенда нету...

  • Файл "frontend/main.css" - главный файл стилей приложения.
  • Файл "frontend/index.js" является точкой входа Webpack приложения (сюда же должны импортироваться другие модули, и файл "main.css").
  • Каталог "frontend/public/" является точкой монтирования веб-приложения (клиент не сможет получить доступ к файлам за его пределами).

Файлы стилей подключаются в js файлах через обычный "import" (Webpack собирает их в отдельный бэндл).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published