Цель проекта попрактиковаться в разработке большого продакшн проекта на React, включая настройку всей инфраструктуры, тестовых сред, работу с сервером/данными и тд.
npm install
- устанавливаем зависимости
npm run start:dev
или npm run start:dev:vite
- запуск сервера + frontend проекта в dev режиме
Спойлер
npm run start
- Запуск frontend проекта на webpack dev servernpm run start:vite
- Запуск frontend проекта на vitenpm run start:dev:server
- Запуск backend сервераnpm run start:dev
- Запуск frontend проекта на webpack dev server + backendnpm run start:dev:vite
- Запуск frontend проекта на vite + backendnpm run build:prod
- Сборка в prod режимеnpm run build:dev
- Сборка в dev режиме (не минимизирован)npm run lint:ts
- Проверка ts файлов линтеромnpm run lint:ts:fix
- Исправление ts файлов линтеромnpm run lint:scss
- Проверка scss файлов style линтеромnpm run lint:scss:fix
- Исправление scss файлов style линтеромnpm run test:unit
- Запуск unit тестов с jestnpm run test:ui
- Запуск скриншотных тестов с lokinpm run test:ui:ok
- Подтверждение новых скриншотовnpm run test:e2e
- Запуск тестовой среды Cypressnpm run prepare
- прекоммит хуки huskynpm run storybook
- запуск Storybooknpm run build-storybook
- Сборка storybook билдаnpm run generate:slice
- Скрипт для генерации FSD слайсовnpm run remove:feature
- Скрипт для удаления устаревших фич
Проект написан разработан с использованием методологии Feature Sliced Design
Для разработки проект содержит 2 конфига:
- Webpack - ./config/build
- vite - vite.config.ts
Оба сборщика адаптированы под основные фичи приложения.
Вся конфигурация хранится в /config
-
/config/babel - babel
-
/config/build - конфигурация webpack
-
/config/jest - конфигурация тестовой среды
-
/config/storybook - конфигурация сторибука
В папке scripts
находятся различные скрипты для рефакторинга\упрощения написания кода\генерации отчетов и тд.
В проекте используется библиотека i18next для работы с переводами.
Файлы с переводами хранятся в public/locales.
Для комфортной работы рекомендуем установить плагин для webstorm/vscode
Документация i18next - https://react.i18next.com/
В проекте используются 4 вида тестов:
-
Обычные unit тесты на jest -
npm run test:unit
-
Тесты на компоненты с React testing library -
npm run test:unit
-
e2e тесты на cypress -
npm run test:e2e
-
Скриншотное тестирование с loki
npm run test:ui
(deprecated)
Подробнее о тестах - документация тестирование
В проекте используется prettiere для форматирования, eslint для проверки typescript кода и stylelint для проверки файлов со стилями.
Также для строгого контроля главных архитектурных принципов используется собственный eslint plugin eslint-plugin-feature-sliced-imports, который содержит 3 правила:
- path-checker - запрещает использовать абсолютные импорты в рамках одного модуля
- fsd-cross-layer-imports - проверяет корректность использования слоев с точки зрения FSD (например widgets нельзя использовать в features и entitites)
- api-strict-imports - разрешает импорт из других модулей только из public api. Имеет auto fix
`npm run lint:ts` - Проверка ts файлов линтером
`npm run lint:ts:fix` - Исправление ts файлов линтером
`npm run lint:scss` - Проверка scss файлов style линтером
`npm run lint:scss:fix` - Исправление scss файлов style линтером
В проекте для каждого компонента описываются стори-кейсы.
Запросы на сервер мокаются с помощью storybook-addon-mock.
Файл со сторикейсами создает рядом с компонентом с расширением .stories.tsx
Запустить сторибук можно командой:
npm run storybook
Подробнее о Storybook
Конфигурация github actions находится в /.github/workflows.
В ci прогоняются тесты, сборка проекта и сторибука, линтинг.
В прекоммит хуках проверяем проект линтерами, конфиг в /.husky
Редизайн приложения выполнен с применением техники feature toggle, чтобы сохранить поддержку старого дизайна
Для автоматического удаления фичи использовать скрипт remove-feature.ts,
Разрешено использование feature flags только с помощью хелпера toggleFeatures или компонента ToggleFeature.
toggleFeatures
В toggleFeature передается объект с опциями
{
**name**: название фича-флага
**on**: функция, которая отработает после Включения фичи
**off**: функция, которая отработает после ВЫключения фичи
}
ToggleFeature
В ToggleFeature передаются пропсы с опциями
- **feature**: название фича-флага
- **on**: компонент, который вмонтируется после Включения фичи
- **off**: компонент, который вмонтируется после ВЫключения фичи
Для автоматического удаления фичи использовать скрипт remove-feature.ts, который принимает 2 аргумента
- Название удаляемого фича-флага
- Состояние (on\off)
Взаимодействие с данными осуществляется с помощью redux toolkit.
По возможности переиспользуемые сущности необходимо нормализовать с помощью EntityAdapter
Запросы на сервер отправляются с помощью RTK query
Для асинхронного подключения редюсеров (чтобы не тянуть их в общий бандл) используется