Zum Hauptinhalt springen

Pre-commit-Hook

Inoffizielle Beta-Übersetzung

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 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

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:

  1. Änderungen in Commits werden immer formatiert.

  2. Unstaged Änderungen werden unter keinen Umständen während des Formatierungsprozesses gestaged.

  3. 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.

  4. 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:

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')"

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