Руководство по стандартизации сообщений о фиксации с помощью Husky в Monorepos
У вас есть проект. Но он монорежимный. Постепенно в проекте появляется много людей. Но вы хотите, чтобы люди следовали определенному стандарту при фиксации сообщений об изменениях, которые они внесли. Вы думаете о будущем. О ясности того, что было сделано. О том, как будет осуществляться сопровождение и т.д.
Как внедрить стандартное сообщение о фиксации для всей команды? Одним из способов является использование git hooks, и Husky может помочь вам в этом!
Подробнее о том, почему и в чем преимущество стандартизации сообщений фиксации, вы можете прочитать здесь.
Сегодня я расскажу вам шаг за шагом о том, как настроить husky на monorepo для стандартизации сообщений коммита в командах.
Допустим, у вас есть структура папок, как показано ниже, в которой вы собираете фронтэнд-проект.
Есть несколько папок, которые вы создаете для сайта администратора и публичного сайта. Или, может быть, у вас есть проект для мобильных устройств, а другой - для настольных. Всё что угодно. Лишь бы у вас было несколько проектов в репозитории.
Давайте приступим!
Рекомендуется добавлять husky в корневой package.json
. Но в этом руководстве мы просто установим husky в одну из папок вашего репозитория и будем использовать наш существующий package.json
. Это совершенно нормально и вполне допустимо.
Это означает, что в корневом каталоге не будет package.json
и package-lock.json
.
1. Перейдите в любую папку, в которой вы хотите разместить Husky. В данном случае в качестве примера возьмем папку user-public.
2. Установите Husky, выполнив следующую команду.
npm install husky
3. Обновите файл package.json
вручную. Вы можете обновить сценарии prepare
в package.json
в соответствии со своими предпочтениями. В данном случае мы меняем каталог на корневой (поскольку установка husky должна выполняться в том же каталоге, что и .git
) и помещаем конфигурацию husky в папку user-public
. Или вы можете просто разрешить установку husky в корневой папке. При этом ваши модули husky будут находиться в папке user-public
.
{
"name": "user-public",
"version": "1.0.0",
"description": "Bla bla bla...",
"main": "index.js",
"keywords": [],
"author": "Harith Zainudin",
"scripts": {
"prepare": "cd .. && husky install user-public/.husky"
}
"license": "ISC",
"dependencies": {
...<all-your-dependencies-here>,
}
}
4. В нашем случае наш .git
находится на одном уровне с нашими user-public
и admin-internal
. Следовательно, перед выполнением команды нам нужно будет самостоятельно выполнить некоторую ручную настройку нашего package.json
. Именно это мы и делаем в шаге 3, где немного изменяем наш package.json
в соответствии с нашей структурой папок и указываем husky, что мы используем текущую папку для установки husky. Если вам интересно и вы не понимаете, где находится папка .git
и что она собой представляет, нажмите здесь. Затем нужно выполнить следующую команду.
npm run prepare
5. Вот что вы получите, выполнив указанную выше команду и увидев папку конфигурации .husky
в папке user-public
.
6. Перед тем как добавить наши Git Hooks, нам нужно добавить "Скрипты", которые будут проверять сообщение о фиксации. В этом случае можно воспользоваться шаблоном, который я создал здесь. Он написан на Javascript (пожалуйста, не судите меня, хаха). Вы можете сделать свой собственный на bash или любом другом языке, но мне приятнее и удобнее работать с Javascript, поэтому я использую Javascript. Шаблон может быть не совсем полным или идеальным, но он делает свою работу для меня!
7. После того как вы скачаете/скопируете шаблон или сделаете собственную проверку, поместите шаблон в папку конфигурации .husky
, и теперь ваша папка будет выглядеть примерно так.
8. Теперь мы готовы приступить к добавлению наших git-хуков! Husky поддерживает все Git-хуки. Поскольку мы хотим стандартизировать только сообщение о фиксации, будем использовать хуки commit-msg. Выполните приведенную ниже команду для добавления хуков. Щелкните здесь, чтобы получить пояснения к приведенной ниже команде.
# You can change to the git hooks that you prefer. But we will use commit-msg hooks as for now.
npx husky add .husky/commit-msg "cat user-public/.husky/commit-msg-linter.js | node --input-type=commonjs"
# Make sure you stage the changes for husky config, then your hooks will take effect.
git add .husky
9. Выполнив приведенную выше команду, вы получите результат, представленный ниже. Теперь в папке конфигурации .husky
будет содержаться файл commit-msg
. Этот файл автоматически создается husky после выполнения указанной выше команды.
10. Как только вы начнете фиксировать свои изменения с сообщением, и если фиксация не соответствует вашей проверке и валидации, будет показано что-то вроде этого. Husky не позволит вам зафиксировать изменения.
Теперь все готово! Это всё, что вам нужно :)
Конечно, если вам не нравится, как выглядит сообщение, или вы хотите использовать другой тип проверки, не стесняйтесь обновить или изменить содержимое файла commit-msg-linter.js
. Как я уже говорил в шаге № 6, вы можете использовать любой язык, который вам удобен!
Надеюсь, вам удастся улучшить и стандартизировать сообщение о фиксации в вашей команде! Удачи и успехов в работе с сообщением о фиксации.
Спасибо за чтение!
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Пояснение к команде на шаге 8
npx husky add .husky/commit-msg
: Эта часть команды указывает Husky на добавление хукаcommit-msg
в директорию.husky
. Хукcommit-msg
используется для соблюдения соглашений о сообщениях фиксации.cat commit-msg-linter.js | node --input-type=commonjs
: Это сценарий, который будет выполняться хукомcommit-msg
. Давайте разберем его подробнее:
cat commit-msg-linter.js
: В этой части используется командаcat
для чтения содержимого файлаcommit-msg-linter.js
. Предполагается, чтоcommit-msg-linter.js
содержит сценарий для линтинга или проверки сообщений фиксации.|
: Это символ трубы, который используется для перенаправления вывода команды, находящейся по левую сторону трубы, на команду, находящуюся по правую сторону.node --input-type=commonjs
: Эта часть команды запускает интерпретатор Node.js со сценариемcommit-msg-linter.js
в качестве входных данных. Флаг--input-type=commonjs
указывает на то, что входной сценарий должен рассматриваться как синтаксис модуля CommonJS.
Что такое .git, как его узнать и где он находится?
Папка .git
- это скрытая папка, которая создается при инициализации Git-репозитория или клонировании проекта из другого места. Она содержит всю необходимую информацию о проекте в системе контроля версий, включая историю фиксаций, адрес удаленного репозитория и многое другое. Папка .git
будет находиться в корневой папке вашего проекта.
Вот некоторые ключевые сведения о папке .git
:
- Назначение: Папка
.git
служит репозиторием проекта, в котором хранится история изменений, внесенных в кодовую базу. В нем хранятся метаданные и объектная база данных проекта. - Содержание: Внутри папки
.git
находятся различные файлы и каталоги, которые необходимы Git для работы с кодом. К ним относятся журнал истории фиксации, база данных объектов, конфигурационные файлы, хуки и многое другое. - Видимость: Папка
.git
по умолчанию скрыта, чтобы предотвратить ее случайное удаление или изменение. Просмотреть ее можно с помощью командыls -a
в терминале Git Bash. Чтобы отобразить скрытую папку для VS Code, ознакомьтесь с этим. - Важность: Папка
.git
имеет огромное значение для выполнения Git-операций над проектом. Без нее ваш проект будет считаться локальным, а не Git-проектом. Удаление папки.git
приведет к удалению всей информации о контроле версий и затруднит отслеживание изменений и совместную работу с другими пользователями.
Важно отметить, что папку .git
не следует изменять или удалять вручную, если вы не разбираетесь в Git и его последствиях.