Project at nowadays
На сегодня серьезный проект должен состоять из:
Аутентификация, авторизация
Должна быть возможность локальной аутентификации и также через других провайдеров(Google, Facebook, ...)
База данных
Как реляционные так и NoSQL варианты
Тесты
Написание тестов для функций и их проверка
CI/CD
Использование сервисов для проверки приложение посредством прогонки тестов, после пуша в репозиторий. Тесты тесно связаны с CI/CD.
Linter
Для общего стиля кода в команде
Loggers
Логгеры как локальные(winston
), так и сервисы(Sentry
)
Git-Flow
Git-flow — наиболее популярная методология разработки проектов с использованием git, где под каждое задание делаеться ветка(feature/SOME-TASK-12) и потом после завершения, делаеться запрос на слияния с develop веткой. Запрос рассмматриваеться другим программистом, вышим по статусу, и он принимает или не принимает слияние.
Kanban
Доска с колонками и перетаскивание заданий в ней.
- To do — спринт бэклог.
- In progress — задачи, которые разрабатываются в данный момент.
- Ready for deploy — задачи, которые уже выполнены, но не представлены в тестовом окружении.
- QA — задачи, готовые к тестированию.
- PO/PM approving — готовые задачи проходят проверку project owner-ом или проектным менеджером.
- Done — выполненные (завершённые) задачи текущего спринта.
Nginx на входе
Установить nginx как распределитель нагрузки
В приложении
- Хранилище сессий пользователей (то есть в браузере храниться только ID сессии, а инфа на сервере сидит)
- Использование протокола - HTTP2 (ему нужны сертфикаты, но их можно сделать локально)
- Использовать сжатие gzip
- Использование HTTPS(TLS)
- Обеспечение защиты зависимостей
- Использование middleware
Управление задачами
Каждый проект содержит задачи которые имеют разным описанием, типом, временем выполнения и т.д. Для этого нужно использовать системы типа Asana(free), Jira(not-free)
Версинирование и CHANGELOG
Если продукт являеться приватным для использования в компании, тогда удобно делать семантическое версинирование(x.y.z) и вести CHANGELOG чтобы потребитель понимал что вошло в ту или другую версию. Повышение версии делаеться каждый конец недели. Если всю неделю были bugfixes, делаем - patch; Если новый функционал - minor, несовместимый функционал с пред. версией - major.
# повысит "z" (x.y.z)
npm version patch
# повысит "y" и обнулит "z" (x.y.z)
npm version minor
# повысит "x" и обнулит "y", "z" (x.y.z)
npm version major