Hoppa till huvudinnehållet

Pre-commit Hook

Inofficiell Beta-översättning

Denna sida har översatts av PageTurner AI (beta). Inte officiellt godkänd av projektet. Hittade du ett fel? Rapportera problem →

Du kan använda Prettier med ett pre-commit-verktyg. Detta kan omformattera dina filer som är markerade som "staged" via git add innan du gör en commit.

Alternativ 1. lint-staged

Användningsfall: Användbart när du vill använda andra kodkvalitetsverktyg tillsammans med Prettier (t.ex. ESLint, Stylelint etc.) eller om du behöver stöd för delvis stageade filer (git add --patch).

Se till att Prettier är installerat och finns i dina devDependencies innan du fortsätter.

npx mrm@2 lint-staged

Detta installerar husky och lint-staged, och lägger sedan till en konfiguration i projektets package.json som automatiskt formaterar filer som stöds i en pre-commit hook.

Läs mer i lint-staged-repo:t.

Alternativ 2. pretty-quick

Användningsfall: Perfekt när du vill formatera hela filer för dina ändrade/stageade filer.

Installera det tillsammans med simple-git-hooks:

npm install --save-dev simple-git-hooks pretty-quick
node --eval "fs.writeFileSync('.simple-git-hooks.json',JSON.stringify({'pre-commit':'npx pretty-quick --staged'},undefined,2)+'\n')"
npx simple-git-hooks

Läs mer i pretty-quick-repo:t.

Alternativ 3. Husky.Net

Användningsfall: En dotnet-lösning för att använda Prettier med andra kodkvalitetsverktyg (t.ex. dotnet-format, ESLint, Stylelint etc.). Stöder flera filstatusar (staged - senaste commit, git-filer etc.).

dotnet new tool-manifest
dotnet tool install husky
dotnet husky install
dotnet husky add pre-commit

Efter installation kan du lägga till prettier-uppgiften i task-runner.json.

task-runner.json
{
"command": "npx",
"args": ["prettier", "--ignore-unknown", "--write", "${staged}"],
"pathMode": "absolute"
}

Alternativ 4. git-format-staged

Användningsfall: Utmärkt när du vill formatera delvis stageade filer och andra alternativ inte passar ditt projekt.

Git-format-staged används för att köra valfri formaterare som kan ta emot filinnehåll via stdin. Den fungerar annorlunda än andra verktyg för delvis stageade filer: den tillämpar formateraren direkt på objekt i git-objektdatabasen och sammanfogar ändringar tillbaka till arbetskatalogen. Denna metod ger flera garantier:

  1. Ändringar i commits är alltid formaterade.

  2. Ostageade ändringar blir aldrig stageade under formateringsprocessen, oavsett omständigheter.

  3. Vid konflikter mellan formaterade stageade ändringar och ostageade ändringar lämnas arbetskatalogsfiler orörda - ditt arbete skrivs inte över och inga stashes behöver rensas.

  4. Ostageade ändringar formateras inte.

Git-format-staged kräver Python v3 eller v2.7. Python är vanligtvis förinstallerat på Linux och macOS, men inte på Windows. Använd git-format-staged med 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')"

Lägg till eller ta bort filtillägg efter projektets behov. Observera att oavsett vilka tillägg du listar respekteras .prettierignore-filer i ditt projekt.

Läs om hur git-format-staged fungerar i Automatic Code Formatting for Partially-Staged Files.

Alternativ 5. Shell-skript

Alternativt kan du spara detta skript som .git/hooks/pre-commit och ge det körbehörighet:

.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

Om git rapporterar att dina formaterade filer fortfarande är modifierade efter en commit, kan du behöva lägga till ett post-commit-skript för att uppdatera gits index.

Lägg till något i stil med följande i .git/hooks/post-commit:

.git/hooks/post-commit
#!/bin/sh
git update-index -g