Предварительный хук коммита
Вы можете использовать Prettier с инструментом pre-commit. Это может переформатировать ваши файлы, помеченные как «запущенные» через git add перед выполнением коммита.
Вариант 1. lint-staged
Случай использования: Полезно, когда вы хотите использовать другие инструменты проверки качества кода вместе с Prettier (например, ESLint, Stylelint и т. д.) или если вам нужна поддержка частично запущенных файлов (git add --patch).
Убедитесь, что Prettier установлен и находится в вашем devDependencies перед продолжением.
npx mrm@2 lint-staged
Это установит husky и lint-staged, затем добавит конфигурацию в package.json проекта, которая будет автоматически форматировать поддерживаемые файлы в предварительном хуке коммита.
Подробнее читайте в репозитории lint-staged.
Вариант 2. Husky.Net
Случай использования: Решение dotnet для использования Prettier вместе с другими инструментами проверки качества кода (например, dotnet-format, ESLint, Stylelint и т. д.). Оно поддерживает несколько состояний файлов (запущенные - последний коммит, файлы git и т. д.).
dotnet new tool-manifest dotnet tool install husky dotnet husky install dotnet husky add pre-commit
После установки вы можете добавить задачу prettier в task-runner.json.
{
"command": "npx",
"args": ["prettier", "--ignore-unknown", "--write", "${staged}"],
"pathMode": "absolute"
}
Вариант 3. git-format-staged
Случай использования: Отлично подходит для форматирования частично запущенных файлов, когда другие варианты не подходят для вашего проекта.
git-format-staged используется для запуска любого форматировщика, который может принимать содержимое файла через stdin. Он работает иначе, чем другие инструменты, которые форматируют частично запущенные файлы: он применяет форматировщик непосредственно к объектам в базе данных объектов git и объединяет изменения обратно в рабочую область. Эта процедура обеспечивает несколько гарантий:
- Изменения в коммитах всегда форматируются.
- Незапущенные изменения никогда, ни при каких обстоятельствах, не ставятся в очередь во время процесса форматирования.
- Если есть конфликты между отформатированными, запущенными изменениями и незапущенными изменениями, файлы вашей рабочей области останутся без изменений — ваша работа не будет перезаписана, и не нужно будет чистить закладки.
- Незапущенные изменения не форматируются.
git-format-staged требует Python v3 или v2.7. Python обычно предварительно установлен в Linux и macOS, но не в Windows. Используйте git-format-staged с husky:
npx husky init
npm install --save-dev git-format-staged
node --eval "fs.writeFileSync('.husky/pre-commit', 'git-format-staged -f \'prettier --ignore-unknown --stdin --stdin-filepath \"{}\"\' .\n')"
yarn husky init
yarn add --dev git-format-staged
node --eval "fs.writeFileSync('.husky/pre-commit', 'git-format-staged -f \'prettier --ignore-unknown --stdin --stdin-filepath \"{}\"\' .\n')"
pnpm exec husky init
pnpm add --save-dev git-format-staged
node --eval "fs.writeFileSync('.husky/pre-commit', 'git-format-staged -f \'prettier --ignore-unknown --stdin --stdin-filepath \"{}\"\' .\n')"
bunx husky init
bun add --dev git-format-staged
bun --eval "fs.writeFileSync('.husky/pre-commit', 'git-format-staged -f \'prettier --ignore-unknown --stdin --stdin-filepath \"{}\"\' .\n')"
Добавьте или удалите расширения файлов, чтобы соответствовать вашему проекту. Обратите внимание, что независимо от того, какие расширения вы перечислите, форматирование будет учитывать все .prettierignore файлы в вашем проекте.
Чтобы узнать, как работает git-format-staged, см. Автоматическое форматирование кода для частично запущенных файлов.
Вариант 4. Скрипт оболочки
В качестве альтернативы вы можете сохранить этот скрипт как .git/hooks/pre-commit и предоставить ему разрешение на выполнение:
#!/bin/sh
FILES=$(git diff --cached --name-only --diff-filter=ACMR | sed 's| |\\ |g')
[ -z "$FILES" ] && exit 0
# Prettify all selected files
echo "$FILES" | xargs ./node_modules/.bin/prettier --ignore-unknown --write
# Add back the modified/prettified files to staging
echo "$FILES" | xargs git add
exit 0
Если git сообщает, что отформатированные файлы все еще изменены после коммита, вам может потребоваться добавить скрипт post-commit для обновления индекса git.
Добавьте что-то вроде следующего в .git/hooks/post-commit:
#!/bin/sh
git update-index -g
© James Long and contributors
https://prettier.io/docs/en/precommit