Шаблон для старта разработки фронтэнда комплексного WEB приложения построенного на технологиях React в соответствии методологии Feature Sliced Design
Для разработки в проекте сконфигурированы два сборщика:
- Webpack - более развитый но довольно медленный
- Vite - vite.config.ts - быстрый сборщик на случай крупных проектов
-
/config/babel
- Babel -
/config/build
- Декомпозиция webpack конфигурации -
/config/jest
- Тестовая среда -
/config/storybook
- Storybook -
/.browserslistrc.json
-
/tsconfig.json
-
/.eslintrc.js
-
/babel.config.json
-
/.stylelintrc.json
-
/.prettierrc.json
+/.prettierignore
-
/netlify.toml
i18n
- настройка блока поддержки переводов для основы и тестовой средыstorybook
- декораторы для корректной работы Storybook с компонетами проета
src
- Исходный код проектаjson-server
- Симуляция бэкэнда (Github) подобно JSON Placeholderscripts
- Библиотека вспомогательных скриптов для рефакторинга\упрощения написания кода, генерации отчётов и т.д.reports
- Автоматически создаваемая папка для сгенерированных отчётов
Устанавка зависимостей проекта (после клонирования например)
npm install
запуск сервера + frontend прокта посредством Webpack...
npm run start:dev
...или посредством Vite
npm run start:dev:vite
Используется библиотека i18next
. Файлы с переводами хранятся в public/locales
Для удобства работы рекомендуется установить плагин среды разработки (Webstorm - i18n support
)
Документация i18next - https://react.i18next.com/
Используется ESLint и Prettier для проверки typescript кода и Stylelint для проверки файлов со стилями.
Также для строгого контроля архитектурных правил используется собственный eslint plugin:
eslint-plugin-impudev-fsd который содержит 3 правила:
- path-checker - запрещает использовать абсолютные импорты в границах одного модуля
- layer-imports - проверяет корректность использования слоёв по правилам FSD (например widgets нельзя использовать в features и entities)
- public-api-imports - разрешает импорт из других модулей только через public api
npm run lint:ts
- Проверка ts файлов линтеромnpm run lint:ts:fix
- Исправление ts файлов линтеромnpm run lint:scss
- Проверка scss файлов style линтеромnpm run lint:scss:fix
- Исправление scss файлов style линтером
В проекте используется 3 вида тестирования:
- Unit тесты на
Jest
/React testing library
-npm run test:unit
- Скриншотное тестирование с loki -
npm run test:ui
- e2e тестирование с Cypress -
npm run test:e2e
Для каждого компонента описываются стори-кейсы.
Запросы на сервер симулируются с помощью storybook-addon-mock
Файл со сторикейсами находится внутри компонента с расширением .stories.tsx
Запускается storybook командой:
npm run storybook
Подробнее о Storybook
Конфигурация github actions находится в /.github/workflows. В ci прогоняются все виды тестов, сборка проекта и сторибука, линтинг.
В прекоммит хуках проверяем проект линтерами, конфиг в /.husky
Взаимодействие с данными осуществляется с помощью redux toolkit. По возможности переиспользуемые сущности необходимо нормализовать с помощью EntityAdapter
Запросы на сервер отправляются с помощью RTK query
Для асинхронного подключения редюсеров используется DynamicModuleLoader
Разрешено использование feature - flags только с помощью хелпера toggleFeatures
В него передаётся объект с опциями
{ name: название feature-flag, on: функция, которая отработает после включения фичи off: функция, которая отработает после выключения фичи }
Для автоматического удаления фичи использовать скрипт remove-feature.ts который принимает два аргумента
- Название удаляемого feature-flag
- Состояние (on\off)
npm run start
- Запуск frontend проекта на webpack dev servernpm run start:vite
- Запуск frontend проекта на vitenpm run start:dev
- Запуск frontend проекта на webpack dev server + backendnpm run start:dev:vite
- Запуск frontend проекта на vite + backendnpm run start:dev:server
- Запуск backend сервераnpm run build:prod
- Сборка в рпежиме prodnpm 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:ui:ci
- Запуск скриншотных тестов в CInpm run test:ui:report
- Генерация полного отчёта для скриншотных тестовnpm run test:ui:json
- Генерация JSON отчёта для скриншотных тестовnpm run test:ui:html
- Генерация HTML отчёта для скриншотных тестовnpm run storybook
- Запуск Storybooknpm run storybook:build
- Сборка Storybook билдаnpm run prepare
- прекоммит хукиnpm run generate:slice
- Скрипт генерации FSD слайсов