Обязательства по стандартизации в проектах Typescript


Зачем писать хорошее сообщение о фиксации?

Сообщения Commit используются для передачи информации о причинах добавления, удаления или изменения определенного фрагмента кода. Хорошие сообщения о фиксации являются отличной документацией для проекта, они могут служить историей того, как код был создан и развивался с течением времени, иметь это в руках может быть очень полезно в некоторых ситуациях, когда мы пытаемся понять архитектурные решения или то, как была реализована та или иная функциональность.

Но как писать хорошие сообщения о фиксации?

Лучший способ написать сообщение о фиксации — это следовать определенному стандарту, одним из наиболее известных стандартов является conventional-commits, спецификация, ориентированная на семантическое версионирование, целью которой является предложение наиболее информативных сообщений о фиксации.

Стандартизация фиксаций в проекте Typescript

Чтобы использовать стандартизацию коммитов в наших проектах, мы должны использовать функцию git, которая позволяет запускать определенный скрипт, когда происходят некоторые действия, мы называем эту функцию hooks, наиболее распространенными типами hooks являются:

  • pre-commit: это первый хук, который выполняется, то есть он выполняется еще до написания сообщения о фиксации, с его помощью мы можем анализировать то, что будет «зафиксировано», то есть мы можем анализировать весь код, который был добавлен с помощью команды git add. Это идеальный крючок для запуска линтеров, таких как eslint, например.

  • prepare-commit-msg: это хук, который запускается перед запуском редактора сообщений фиксации, здесь мы можем установить сообщение фиксации по умолчанию.

  • commit-msg: это хук, который получает параметр, который является путем к файлу с сообщением о фиксации, написанным пользователем, скрипт запускается, используя этот файл в качестве ссылки, так как он может проверить, было ли сообщение написано правильно.

  • post-commit: хук, выполняемый, когда весь процесс фиксации завершен, обычно используется для уведомления или чего-то подобного.

  • pre-push: запускается во время git push, после проверки удаленных ссылок (если репозиторий действительно существует, например), но до передачи каких-либо объектов, часто используется для запуска модульных тестов проекта.

Установка и настройка инструментов

Будут использованы следующие инструменты:

  • husky: позволяет создавать крючки в git упрощенным способом
  • commitlint: позволяет проверять наши сообщения о фиксации
  • lint-staged: выполняет сценарий в файлах, которые находятся в области staged
  • commitizen: это инструмент командной строки, который может быть использован для помощи в создании сообщений фиксации.

Установка, настройка и создание первого крючка

lint-staged

Для установки lint-staged необходимо выполнить команду npm install lint-staged --save-dev, которая сохранит его как зависимость разработки. Lint-staged должен знать, какая команда будет выполнена и в каком коде, для этого он использует файл, который должен находиться в корневом каталоге приложения под названием .lintstagedrc.json, поскольку мы хотим выполнять наш linter во всех наших файлах typescript проекта, мы должны поместить следующую конфигурацию в этот файл:

{
  "*.ts": ["npm run lint"]
}
Войдите в полноэкранный режим Выход из полноэкранного режима
commitlint

Для установки commitlint необходимо выполнить команду npm install @commitlint/{cli,config-conventional} --save-dev, а для его конфигурации, как и для lint-staged, нам понадобится файл в корневом каталоге проекта, этот файл может иметь различные имена и расширения:

  • .commitlint.config.js
  • .commitlintrc.js
  • .commitlintrc
  • .commitlintrc.json

И мы должны заполнить этот файл типом конвенции, который мы используем в наших сообщениях фиксации, для этого мы можем выполнить следующую команду: echo "{'extends': ['@commitlint/config-conventional']}". >> .commitlintrc, эта команда создает правильно заполненный файл с шаблоном, используемым в наших коммитах.

Хаски

Для установки husky мы используем команду npm install husky --save-dev, после установки мы должны включить создание хуков и для этого используем команду npx husky install, после выполнения этой команды будет создан каталог .husky, в котором будут находиться наши файлы скриптов хуков. Чтобы крючки были доступны, мы должны запустить npm pkg set scripts.prepare="husky install", и тогда у нас будет внутри package.json:

// package.json
{
  "scripts": {
    "prepare": "husky install"
  }
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Создание первого крючка

Первый хук, который мы собираемся создать, это pre-commit, он будет выполнять функцию форматирования кода, который находится в нашей стадийной области, для создания хука мы выполним следующий код:

npx husky add .husky/pre-commit "npx lint-staged"

Команда npx lint-staged будет отвечать за выполнение команды npm run lint, которая была создана в массиве в файле .lintstagedrc.json.

Теперь у нас есть файл pre-commit внутри каталога .husky и его содержимое:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npx lint-staged
Войдите в полноэкранный режим Выход из полноэкранного режима
commitizen

Для установки commitizen мы используем следующую команду: npm install commitizen --save-dev и нам также необходимо инициализировать спецификацию conventional-commits, для чего нам необходимо выполнить: npx commitizen init cz-conventional-changelog --save-dev --save-exact, поскольку commitizen — это инструмент командной строки, который будет запущен до получения сообщения о фиксации, мы должны добавить хук prepare-commit-msg для его выполнения, так что мы имеем:

npx husky add .husky/prepare-commit-msg "exec < /dev/tty && npx cz --hook || true"

Эта команда заставит терминал открыть инструмент командной строки, где вы можете выбрать тип производимой модификации, а также написать соответствующее сообщение для фиксируемой модификации.

Создание крючков для сообщения о фиксации

Теперь, когда у нас уже созданы два хука до фиксации, нам нужно создать хук, который будет использоваться для написанного сообщения, здесь мы проверим, действительно ли сообщение соответствует действительности. Выполнив команду:

npx husky add .husky/commit-msg "npx --no -- commitlint --edit $1".

Цель этого крючка — проанализировать написанный коммит и выяснить, соответствует ли он стандартам, установленным в выбранной конвенции. Если сообщение было написано неправильно, мы получим следующий результат:

Оцените статью
devanswers.ru
Добавить комментарий