Skip to content

10takla/react-apps

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

21 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Запуск ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

npm install - устанавливаСм зависимости
npm run start:dev ΠΈΠ»ΠΈ npm run start:dev:vite - запуск сСрвСра + frontend ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² dev Ρ€Π΅ΠΆΠΈΠΌΠ΅

Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹

  • npm run start - Запуск frontend ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° webpack dev server
  • npm run start:vite - Запуск frontend ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° vite
  • npm run start:dev - Запуск frontend ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° webpack dev server + backend
  • npm run start:dev:vite - Запуск frontend ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° vite + backend
  • npm run start:dev:server - Запуск backend сСрвСра
  • npm 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 тСстов с jest
  • npm run test:ui - Π₯апуск ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π½Ρ‹Ρ… тСстов с loki
  • npm run test:ui:ok - ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ΠΎΠ²
  • npm run test:ui:ci - Запуск ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π½Ρ‹Ρ… тСстов Π² CI
  • npm run test:ui:report - ГСнСрация ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° для ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π½Ρ‹Ρ… тСстов
  • npm run test:ui:json - ГСнСрация json ΠΎΡ‚Ρ‡Π΅Ρ‚Π° для ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π½Ρ‹Ρ… тСстов
  • npm run test:ui:html - ГСнСрация HTML ΠΎΡ‚Ρ‡Π΅Ρ‚Π° для ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π½Ρ‹Ρ… тСстов
  • npm run storybook - запуск Storybook
  • npm run storybook:build - Π‘Π±ΠΎΡ€ΠΊΠ° storybook Π±ΠΈΠ»Π΄Π°
  • npm run prepare - ΠΏΡ€Π΅ΠΊΠΎΠΌΠΌΠΈΡ‚ Ρ…ΡƒΠΊΠΈ
  • npm run generate:slice - Π‘ΠΊΡ€ΠΈΠΏΡ‚ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ FSD слайсов

АрхитСктура ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ написан Π² соотвСтствии с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ Feature sliced design

Бсылка Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ - feature sliced design


Π Π°Π±ΠΎΡ‚Π° с ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌΠΈ

Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° i18next для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌΠΈ. Π€Π°ΠΉΠ»Ρ‹ с ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌΠΈ хранятся Π² public/locales.

Для ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ для webstorm/vscode

ДокумСнтация i18next - https://react.i18next.com/


ВСсты

Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ 4 Π²ΠΈΠ΄Π° тСстов:

  1. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ unit тСсты Π½Π° jest - npm run test:unit
  2. ВСсты Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ с React testing library -npm run test:unit
  3. Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π½ΠΎΠ΅ тСстированиС с loki npm run test:ui
  4. e2e тСстированиС с Cypress npm run test:e2e

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ тСстах - докумСнтация тСстированиС


Π›ΠΈΠ½Ρ‚ΠΈΠ½Π³

Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ eslint для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ typescript ΠΊΠΎΠ΄Π° ΠΈ stylelint для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² со стилями.

Π’Π°ΠΊΠΆΠ΅ для строгого контроля Π³Π»Π°Π²Π½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ собствСнный eslint plugin eslint-plugin-ulbi-tv-plugin, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит 3 ΠΏΡ€Π°Π²ΠΈΠ»Π°

  1. path-checker - Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ модуля
  2. layer-imports - провСряСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ использования слоСв с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния FSD (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ widgets нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² features ΠΈ entitites)
  3. public-api-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

Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ стори-кСйсы. Запросы Π½Π° сСрвСр ΠΌΠΎΠΊΠ°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ storybook-addon-mock.

Π€Π°ΠΉΠ» со сторикСйсами создаСт рядом с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .stories.tsx

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сторибук ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

  • npm run storybook

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Storybook

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

import React from 'react';
import { ComponentStory, ComponentMeta } from '@storybook/react';

import { ThemeDecorator } from '@/shared/config/storybook/ThemeDecorator/ThemeDecorator';
import { Button, ButtonSize, ButtonTheme } from './Button';
import { Theme } from '@/shared/const/theme';

export default {
    title: 'shared/Button',
    component: Button,
    argTypes: {
        backgroundColor: { control: 'color' },
    },
} as ComponentMeta<typeof Button>;

const Template: ComponentStory<typeof Button> = (args) => <Button {...args} />;

export const Primary = Template.bind({});
Primary.args = {
    children: 'Text',
};

export const Clear = Template.bind({});
Clear.args = {
    children: 'Text',
    theme: ButtonTheme.CLEAR,
};

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ содСрТит 2 ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°:

  1. Webpack - ./config/build
  2. vite - vite.config.ts

Оба сборщика Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΠ΄ основныС Ρ„ΠΈΡ‡ΠΈ прилоТСния.

Вся конфигурация хранится Π² /config

  • /config/babel - babel
  • /config/build - конфигурация webpack
  • /config/jest - конфигурация тСстовой срСды
  • /config/storybook - конфигурация сторибука

Π’ ΠΏΠ°ΠΏΠΊΠ΅ scripts находятся Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ скрипты для Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°\упрощСния написания ΠΊΠΎΠ΄Π°\Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΈ Ρ‚Π΄.


CI pipeline ΠΈ pre commit Ρ…ΡƒΠΊΠΈ

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ github actions находится Π² /.github/workflows. Π’ ci ΠΏΡ€ΠΎΠ³ΠΎΠ½ΡΡŽΡ‚ΡΡ всС Π²ΠΈΠ΄Ρ‹ тСстов, сборка ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ сторибука, Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³.

Π’ ΠΏΡ€Π΅ΠΊΠΎΠΌΠΌΠΈΡ‚ Ρ…ΡƒΠΊΠ°Ρ… провСряСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π»ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΌΠΈ, ΠΊΠΎΠ½Ρ„ΠΈΠ³ Π² /.husky


Π Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

ВзаимодСйствиС с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ redux toolkit. По возмоТности ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ сущности Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ EntityAdapter

Запросы Π½Π° сСрвСр ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ RTK query

Для асинхронного ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π΅Π΄ΡŽΡΠ΅Ρ€ΠΎΠ² (Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ‚ΡΠ½ΡƒΡ‚ΡŒ ΠΈΡ… Π² ΠΎΠ±Ρ‰ΠΈΠΉ Π±Π°Π½Π΄Π») ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ DynamicModuleLoader


Бущности (entities)

Π€ΠΈΡ‡ΠΈ (features)