Full private
FSD- MVA - ссылка на статью
Webpack-слишком с ним много проблем
- Vite
- TypeScript
- React
- React-Router-Dom
- React-Hook-Form
Redux-слишком много весит. ~45kb (15kb gzip)
Redux ToolkitRedux ThunkError
- @vanyamate/sec -
вместо redux
- SCSS + CSS Modules
I18N-Next-слишком много весит. ~80kb (30kb gzip)
Shadcn UI-слишком много весит. ~45kb (15kb gzip)
Tailwind
Axios-слишком много весит. ~70kb (25kb gzip) o.O
- @vanyamate/fetch-with-interceptors -
вместо axios
- Vite
- vite-bundle-visualizer
- vite-plugin-bundle-monitoring
- Git
- GitHub
- GitHub Actions
- GitHub
- Lint
- ESLint
- StyleLint
- Test
- Jest
- React testing library
- Storybook
Loki-пока не поддерживает Storybook 8 ( wip )
- Playwright
- Cypress -
пока что гораздо менее удобный чем pw
- cypress-image-diff-js
плохо работает с cypress open
делает другой viewport
js config без настройки пути
если в тесте несколько подряд скриншотов, обновлять будет нужно их по очереди. как варинат - использовать 1 скриншот в 1 тесте
- cypress-image-diff-js
- reg-cli
- Husky
MockServer-уже не нужен
json-server
Есть 2 типа компонентов.
- Чистые
shared
иentity
- Грязные
features
,widgets
иpages
Не зависят ни от чего из вне, кроме других чистых компонентов и функций. То есть никакие внешние изменения среды не должны касаться работы этих компонентов. Внутри чистых компонентов можно использовать только чистые функции и другие чистые компоненты.
- Это максимально переиспользуемый слой не относящийся к специфике приложение/бизнеса.
- Состоит только из самого себя, своих дочерних компонентов или одного другого
shared
при условии, что новый компонент является надстройкой или оберткой над ним. - Не может использовать внутри себя ничего из вне и не может никак влиять ни на что во вне. (исключение
Link
)
- Это максимально переиспользуемый слой не относящийся к специфике приложение/бизнеса.
- Состоит только из
shared
,entities
или своих дочерних компонентов - Не может использовать внутри себя ничего из вне (кроме
shared
и другихentities
) и не может никак влиять ни на что во вне. (исключениеLink
)
Зависят от чего угодно из вне. Например от стейтменеджеров, роутеров, сервисов итд.
- Простые компоненты состоящие из одного компонента
shared
илиentities
наделенные какой-то логикой.
- Сложные компоненты состоящие из любых других компонентов и наделенные какой-то логикой
Иерархия компонентов выглядит так:
widgets
->widgets/features/entities/shared
+logic
features
->entities/shared
+logic
entities
->entities/shared
shared
->self code
Страницы это отдельный компонент и он может делиться на две части:
- Компонент для получения данных и подгрузки view части.
- Асинхронная view часть
или быть одной синхронной частью. Зависит от ситуации.
src
shared
ui-[name]
[type]
[ClearComponent]
lib
[accessory]
[purpose].ts
index.ts
index.ts
index.ts
-@/shared
entities
[accessory]
[type]
[ClearComponent]
index.ts
-@/entities
features
[accessory]
[type]
[Component]
index.ts
-@/features
widgets
[accessory]
[type]
[Component]
index.ts
index.ts
index.ts
-@/widgets
pages
[PageName]Page
[Page]
index.ts
index.ts
-@/pages
app
[accessory]
[Folder names]
index.ts
index.ts
-@/app
ui
- то что относится к отображениюlib
- чистые функции относящиеся именно к тому месту где они находятсяhooks
- хукиconfig
- конфигурационные файлы или функции для создания конфигурацийtypes
- типыdecorators
- декораторыservices
- сервисы с чем-то внешним или бизнес-логикаcontext
- контекст и всё что с ним связано_story
- storybook_tests
- тестыits
- элементарные тесты[accessory]
- принадлежность к чемуuser
[purpose]
- цель (задача)getUserName
[type]
- типmodal
,input
,form
,button
[name]
- названиеkit
,material
ui
[Component].tsx
? [Component].module.scss
? [Component].async.scss
- контентная часть которая подгружается асинхронно
? lib
- простые чистые функции от которых зависит этот компонент[accessory]
? [purpose].ts
? hooks
- хуки которые используются ВНУТРИ этого компонента[accessory]
? use[Purpose].ts
? config
- конфигурационные файлы которые используются ВНУТРИ этого компонента? [accessory].ts
? [accessory].json
? types
- типы используемые ВНУТРИ этого компонента? [Component].types.ts
_story
? decorators
? [accessory].ts
? config
? [accessory].ts
? [accessory].json
[Component].story.tsx
_tests
its
[Component].it.tsx
? config
? [accessory].ts
? [accessory].json
? decorators
? [accessory].ts
[Component].test.ts
index.ts
- публичный API компонента