Хук 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-hooksyarn add --dev simple-git-hooks pretty-quick
echo '{\n "pre-commit": "yarn pretty-quick --staged"\n}\n' > .simple-git-hooks.json
yarn simple-git-hookspnpm 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-hooksbun 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, а изменения объединяются с рабочей копией. Эта процедура обеспечивает несколько гарантий:
- Изменения в коммитах всегда отформатированы.
- Изменения, не добавленные в индекс, ни при каких обстоятельствах не попадут в индекс во время форматирования.
- Если между отформатированными подготовленными изменениями и изменениями, не добавленными в индекс, возникают конфликты, файлы в рабочей копии остаются нетронутыми — ваша работа не будет перезаписана, и удалять stash не потребуется.
- Изменения, не добавленные в индекс, не форматируются.
Для работы 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