Spec-Zone.ru › Prettier

Предварительный хук коммита

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

  1. Изменения в коммитах всегда форматируются.
  2. Незапущенные изменения никогда, ни при каких обстоятельствах, не ставятся в очередь во время процесса форматирования.
  3. Если есть конфликты между отформатированными, запущенными изменениями и незапущенными изменениями, файлы вашей рабочей области останутся без изменений — ваша работа не будет перезаписана, и не нужно будет чистить закладки.
  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, см. Автоматическое форматирование кода для частично запущенных файлов.

Вариант 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

Spec-Zone.ru

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