@rooxteam/cra-template
v0.1.5
Published
Opinionated Rooxteam Template for SPA
Downloads
8
Readme
1. Git
1.1 Репозиторий
Клонировать через HTTPS:
git clone https://github.com/rooxteam/cra-template-rooxteam
Или клонировать через GitHub CLI:
gh repo clone rooxteam/cra-template-rooxteam
1.2 Рабочий процесс
- Имя ветки для production релизов: origin/master
- Имя ветки для "следующего релиза" находящегося в разработке: develop
- Префикс ветки нового функционала: feature/
- Префикс ветки для исправления ошибки: bugfix/
- Префикс ветки для релиза: release/
- Префикс ветки для исправления небольшой ошибки: hotfix/
- Префикс ветки для поддержки: support/
1.3 Версионирование
В соответствии с Semantic Versioning - https://semver.org/
2. Начало работы
2.1 Установка
Данный репозиторий содержит шаблон для библиотеки create-react-app
, пока репозиторий не выложен в https://www.npmjs.com/ создать проект можно следуюющей командой в терминале:
npx create-react-app my-app --template file:./path/to/cra-template-rooxteam
2.2 Запуск
Используйте команды ниже для запуска приложения:
npm start
или
yarn start
Для сборки приложения запустите:
npm run build
или
yarn run build
2.3 Проверка ESLint/stylelint предупреждений
Для того, чтобы проверить код на ошибки ESLint используйте следующую команду. По умолчанию она используется библиотекой Husky перед каждым коммитом, не давая вам закоммитить код с предупреждениями или ошибками.
yarn run lint
- проверка eslint и stylelint
yarn run lint-fix
- проверка и исправление eslint и stylelint
yarn run lint-staged
- проверка и исправление eslint и stylelint индексированных файлов
yarn run stylelint
- проверка stylelint
yarn run stylelint-fix
- проверка и исправление stylelint
2. Ветки и виды шаблонов
2.1 Данный шаблон включает три ветки, каждая из которых расширяет предыдущую:
master/develop
- базовый шаблон, содержащий только конфигурационные файлыfeature/app-structure
- шаблон, расширенный структурой приложения. Содержит основные директории, использующиеся в проекте в папкеsrc
, напримерpages
илиcomponents
. Не включает в себяredux store
feature/redux
- шаблон, включающий в себя базовый, структуру приложения + настроенное redux хранилище. В папкуstore
содержатся все необходимые компоненты для работы хранилища, например,actions
,reducers
,sagas
и др.
2.2 Список основных библиотек и особенностей в каждом из шаблонов:
2.2.1 master/develop
- enzyme - библиотека для написания тестов
- node-sass - для работы css-modules
- react, react-dom, react-router-dom, react-scripts - основные библиотеки для работы React и роутинга
- react-app-rewired - позволяет расширить конфиг Webpack без eject. Доработанный конфиг содержится в файле
config-overrides.js
- cypress - Библиотека для написание e2e тестов
Стили
Стили реализованы через scss
+ css-modules
. Файл именуется следующим образом: PageName.module.scss
.gitkeep
Файл .gitkeep
в директориях проекта существует только для отображения папок в гите. При наполнении той или иной папки файл можно удалить
Config
В папке src/configs
находится адаптер конфигураций проекта. На staging/production конфигурация поставляется сервером через глобальную переменную roox_config
.
При локальной разработке используется файл localCongig.js
2.2.2 feature/app-structure
Содержит все библиотеки из базового шаблона, а также:
- axios - библиотека для отправки запросов
Описание структуры:
assets
- иконки, картинки, шрифты и любые другие вспомогательные ресурсы приложенияcomponents
- общие компоненты, которые используются в приложении. Не настолько глобальные, чтобы переместиться в UIKit, но встречаются достаточно часто, чтобы попасть в эту папкуconfigs
- основные конфигурацииhocs
- любые функции высшего порядка, в которые оборачиваются компонентыpages
- основные страницы приложения. Одна папка внутри - одна страница. Каждая папка страницы состоит из папкиcomponents
(компоненты, относящиеся только к этой странице) и файловPageName.jsx
иPageName.module.scss
. В веткеfeature/redux
здесь также должна лежать папкаeffects
, которая содержит все, что касается хранилища и сайд-эффектов для этой страницы.styles
- базовые стили вindex.scss
и файл с темойtheme.scss
, который содержит основные цвета из дизайна. Этот файл должен быть импортирован в любом scss-файле страницы, чтобы использовать оттуда все цвета и любые другие переменные.utils
- любые побочные функции, которые можно отнести к утилитамredux
- папка в которой хранятся ducks. Каждый duck содержит в себе файлы одной сущности (reducer, sagas, actions, etc).
2.2.3 feature/redux
Содержит все библиотеки, перечисленные выше, а также:
- history - библиотека, необходимая для настройки навигации через actions, например из
redux-saga
- redux, react-redux - основные библиотеки redux-хранилища
- redux-actions - библиотека для более комфортной работы с redux-действиями
- redux-devtools-extension - для подключения инструментов разработчика в браузере
- redux-saga - для обработки асинхронных сайд-эффектов, например запросов на сервер
Code Splitting
С целью реализовать code-splitting при загрузке страниц в проекте может использоваться React.lazy()
.
В src/pages/routes
для его реализации используется функция LoadPage
, которая принимает в себя название страницы, обращается в папку с соответствующим названием и достает оттуда файл нужной страницы,
одновременно загружая редюсер и сагу (если используется шаблон feature/redux).
3. Список технологий
1) React (v 16.8.6)
Одним из главных последних нововведений являются хуки. Они позволяют полностью отказаться от использования классовых компонентов и перейти на функциональные. По словам авторов классы плохо минимизируются, а горячая перезагрузка делает их ненадежными. Функционал хуков имеет все возможности для использование стейта и вызова сайд эффектов. Рекомендуется использовать для разработки именно hooks.
2) Redux (v 4.0.4)
Redux является одним из самых популярных контейнером состояния приложения. Позволяет хранить все состояние приложения в одном месте (store). Все компоненты подписанные на редакс стор будут получать последние изменения. Таким образом, Redux делает поток данных более понятным.
Одной из альетернатив является MobX. Плюсом является то, что писать код быстрее, но редакс намного проще поддается отладке.
3) React-redux (v 7.1)
Реакт-редакс позволяет связать компонент со стором, в последней версии добавлены хуки, которые позволяют больше не оборачивать компонент в connect, что значительно ускоряет разработку.
4) Redux-saga (v 1.0.5)
Сага необходима для выполнения сайд-эффектов. Саги имеют преимущество при тестировании и позволяют организовывать сложные последовательности сайд-эффектов. Саги слушают все экшены, и "работают в фоне".
5) React-router-dom (v 5.0.1)
Библиотека нужна для создания многостраничных приложений. Отрисовывает разные компоненты в зависимости от того, какой путь в данный момент активен.В каждый момент времени только один из этих компонентов будет выведен в элементе root. Таким образом, мы один раз монтируем корневой компонент, который меняет содержимое при изменении маршрута. Также маршрутизатор меняет содержимое страницы без обращения на сервер и без перезагрузки всей страницы.
This project was bootstrapped with Create React App.
Example of authorization
Пример простейшей авторизации сделан на основе сохранения токена в cookie, пример можно посмотреть в duck'e auth
и в компонентах App
и Login
Available Scripts
In the project directory, you can run:
yarn start
Runs the app in the development mode.
Open http://localhost:3000 to view it in the browser.
The page will reload if you make edits.
You will also see any lint errors in the console.
yarn test
Launches the test runner in the interactive watch mode.
See the section about running tests for more information.
yarn build
Builds the app for production to the build
folder.
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.
Your app is ready to be deployed!
See the section about deployment for more information.
yarn eject
Note: this is a one-way operation. Once you eject
, you can’t go back!
If you aren’t satisfied with the build tool and configuration choices, you can eject
at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except eject
will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
You don’t have to ever use eject
. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
Learn More
You can learn more in the Create React App documentation.
To learn React, check out the React documentation.