Попросили меня друзья помочь с настройкой CreateReactApp
(CRA) приложения, чтобы синтаксис проверялся, красота кода в одном стиле автоматически наводилась, и чтобы не давало закоммитить, если всё вышесказанное не выполняется.
Начал я с настройки ESLint. Он нужен для проверки синтаксиса, стиля кодирования и поиска ошибок в коде. По умолчанию ESLint уже есть в CRA, его нужно только инициализировать через консоль в папке проекта:
1 | yarn eslint --init |
И затем настроить. Установите через консоль следующие плагины в папку проекта:
1 | yarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint-config-airbnb-typescript eslint-plugin-jest eslint-config-airbnb |
Заполните файл .eslintrc.json следующими настройками:
1 | { |
Из конфига ESLint видно, что мы используем AirBnb, а также настраиваем сразу и Prettier. Prettier - это инструмент автоматического форматирования кода. Для его установки запустите в консоли:
1 | yarn add -D prettier eslint-config-prettier eslint-plugin-prettier |
Cоветую создать файл .eslintignore
и поместить туда следующее содержимое:
1 | build/* |
Создайте файл .prettierrc
и поместите туда следующее содержимое:
1 | { |
Осталось только поправить package.json
, внеся туда следующие секции:
1 | "scripts": { |
Теперь можно проверить что всё впорядке, запустив в консоли следующие команды:
1 | yarn lint |
Если вы настроили всё правильно команды отработают без ошибок.
Добавим теперь заключительную вещь: чтобы при попытке коммита в git
запускались наши вышеуказанные скрипты, и можно было закоммитить только код, который эти скрипты успешно проходит.
Для этого установим Husky, который будет реагировать на событие попытки коммита, следующей командой из консоли:
1 | yarn add -D lint-staged husky |
Для инициализации Husky выполните в консоли команду:
1 | yarn husky install |
Так как у нас версия Husky 7, то в соответствующей скрытой папке .husky
необходимо внести следующие изменения в файл pre-commit
:
1 |
|
Теперь вам удастся закоммитить ваш код только в случае успешного выполнения скриптов из файла pre-commit
.