Pre-commit Hook
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
- 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
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.
{
"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:
-
Ändringar i commits är alltid formaterade.
-
Ostageade ändringar blir aldrig stageade under formateringsprocessen, oavsett omständigheter.
-
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.
-
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:
- 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')"
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:
#!/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:
#!/bin/sh
git update-index -g