Spec-Zone.ru › Prettier

Хук pre-commit

Вы можете использовать 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 проекта будет добавлена конфигурация, которая автоматически форматирует поддерживаемые файлы с помощью хука pre-commit.

Подробнее см. в репозитории lint-staged.

Вариант 2. pretty-quick

Сценарий использования: Отличный выбор, если вы хотите полностью форматировать изменённые или подготовленные файлы.

Установите его вместе с simple-git-hooks:

  • npm
  • yarn
  • pnpm
  • bun
npm install --save-dev simple-git-hooks pretty-quick
echo '{\n  "pre-commit": "npx pretty-quick --staged"\n}\n' > .simple-git-hooks.json
npx simple-git-hooks
yarn add --dev simple-git-hooks pretty-quick
echo '{\n  "pre-commit": "yarn pretty-quick --staged"\n}\n' > .simple-git-hooks.json
yarn simple-git-hooks
pnpm add --save-dev simple-git-hooks pretty-quick
echo '{\n  "pre-commit": "pnpm pretty-quick --staged"\n}\n' > .simple-git-hooks.json
pnpm simple-git-hooks
bun add --dev simple-git-hooks pretty-quick
echo '{\n  "pre-commit": "bun pretty-quick --staged"\n}\n' > .simple-git-hooks.json
bun simple-git-hooks

Подробнее см. в репозитории pretty-quick.

Вариант 3. 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"
}

Вариант 4. git-format-staged

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

Git-format-staged используется для запуска любого форматировщика, который может принимать содержимое файла через stdin. Он работает не так, как другие инструменты для форматирования частично подготовленных файлов: форматировщик применяется непосредственно к объектам в базе данных объектов git, а изменения объединяются с рабочей копией. Эта процедура обеспечивает несколько гарантий:

  1. Изменения в коммитах всегда отформатированы.
  2. Изменения, не добавленные в индекс, ни при каких обстоятельствах не попадут в индекс во время форматирования.
  3. Если между отформатированными подготовленными изменениями и изменениями, не добавленными в индекс, возникают конфликты, файлы в рабочей копии остаются нетронутыми — ваша работа не будет перезаписана, и удалять stash не потребуется.
  4. Изменения, не добавленные в индекс, не форматируются.

Для работы Git-format-staged требуется Python v3 или v2.7. Python обычно предустановлен в Linux и macOS, но не в Windows. Используйте git-format-staged вместе с husky:

  • npm
  • yarn
  • pnpm
  • bun
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 см. в статье Автоматическое форматирование кода в частично подготовленных файлах.

Вариант 5. Скрипт оболочки

В качестве альтернативы можно сохранить этот скрипт под именем .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/precommit

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API