Pre-commit-Hook
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
Sie können Prettier mit einem Pre-commit-Tool verwenden. Dies kann Ihre Dateien neu formatieren, die via git add als "staged" markiert wurden, bevor Sie committen.
Option 1. lint-staged
Anwendungsfall: Nützlich, wenn Sie neben Prettier weitere Code-Qualitätstools verwenden möchten (z.B. ESLint, Stylelint etc.) oder wenn Sie Unterstützung für teilweise gestagete Dateien benötigen (git add --patch).
Stellen Sie sicher, dass Prettier installiert ist und sich in Ihren devDependencies befindet, bevor Sie fortfahren.
npx mrm@2 lint-staged
Dadurch werden husky und lint-staged installiert, und eine Konfiguration zur package.json des Projekts hinzugefügt, die unterstützte Dateien automatisch in einer Pre-commit-Hook formatiert.
Weitere Informationen finden Sie im lint-staged-Repository.
Option 2. pretty-quick
Anwendungsfall: Ideal, wenn Sie eine gesamte Dateiformatierung Ihrer geänderten/gestageten Dateien wünschen.
Installieren Sie es zusammen mit 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
Weitere Informationen im pretty-quick-Repository.
Option 3. Husky.Net
Anwendungsfall: Eine .NET-Lösung zur Verwendung von Prettier mit anderen Code-Qualitätstools (z.B. dotnet-format, ESLint, Stylelint etc.). Unterstützt mehrere Dateizustände (staged - last-commit, git-files etc.).
dotnet new tool-manifest
dotnet tool install husky
dotnet husky install
dotnet husky add pre-commit
Nach der Installation können Sie die Prettier-Aufgabe zur task-runner.json hinzufügen.
{
"command": "npx",
"args": ["prettier", "--ignore-unknown", "--write", "${staged}"],
"pathMode": "absolute"
}
Option 4. git-format-staged
Anwendungsfall: Ideal, wenn Sie teilweise gestagete Dateien formatieren möchten und andere Optionen nicht gut zu Ihrem Projekt passen.
Git-format-staged wird verwendet, um beliebige Formatierer auszuführen, die Dateiinhalt via stdin akzeptieren. Es funktioniert anders als andere Tools für teilweise gestagete Dateien: Es wendet den Formatierer direkt auf Objekte in der Git-Objekt-Datenbank an und überträgt Änderungen zurück in den Arbeitsbaum. Dieses Verfahren bietet mehrere Garantien:
-
Änderungen in Commits werden immer formatiert.
-
Unstaged Änderungen werden unter keinen Umständen während des Formatierungsprozesses gestaged.
-
Bei Konflikten zwischen formatierten, gestageten Änderungen und unstaged Änderungen bleibt Ihr Arbeitsbaum unverändert – Ihre Arbeit wird nicht überschrieben und es gibt keine Stashes zu bereinigen.
-
Unstaged Änderungen werden nicht formatiert.
Git-format-staged benötigt Python v3 oder v2.7. Python ist normalerweise unter Linux und macOS vorinstalliert, aber nicht unter Windows. Verwenden Sie git-format-staged mit 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')"
Fügen Sie Dateiendungen hinzu oder entfernen Sie sie entsprechend Ihres Projekts. Beachten Sie, dass die Formatierung unabhängig von den aufgelisteten Endungen alle .prettierignore-Dateien in Ihrem Projekt berücksichtigt.
Informationen zur Funktionsweise von git-format-staged finden Sie unter Automatic Code Formatting for Partially-Staged Files.
Option 5. Shell-Skript
Alternativ können Sie dieses Skript als .git/hooks/pre-commit speichern und Ausführungsberechtigungen erteilen:
#!/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
Wenn Git meldet, dass Ihre mit Prettier formatierten Dateien nach dem Commit immer noch als geändert markiert sind, müssen Sie möglicherweise ein Post-Commit-Skript hinzufügen, um den Git-Index zu aktualisieren.
Fügen Sie Folgendes in .git/hooks/post-commit ein:
#!/bin/sh
git update-index -g