Crochet de pré-commit
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Vous pouvez utiliser Prettier avec un outil de pré-commit. Celui-ci peut reformater vos fichiers marqués comme "staged" via git add avant votre commit.
Option 1. lint-staged
Cas d'utilisation : Utile lorsque vous souhaitez utiliser d'autres outils de qualité de code avec Prettier (ex. ESLint, Stylelint, etc.) ou si vous avez besoin du support des fichiers partiellement mis en staging (git add --patch).
Assurez-vous que Prettier est installé et figure dans vos devDependencies avant de continuer.
npx mrm@2 lint-staged
Cette commande installera husky et lint-staged, puis ajoutera une configuration au package.json du projet qui formatera automatiquement les fichiers pris en charge via un crochet de pré-commit.
Pour en savoir plus, consultez le dépôt lint-staged.
Option 2. pretty-quick
Cas d'utilisation : Idéal lorsque vous souhaitez formater l'intégralité de vos fichiers modifiés/mis en staging.
Installez-le avec simple-git-hooks :
- npm
- yarn
- pnpm
- bun
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
yarn add --dev simple-git-hooks pretty-quick
node --eval "fs.writeFileSync('.simple-git-hooks.json',JSON.stringify({'pre-commit':'yarn pretty-quick --staged'},undefined,2)+'\n')"
yarn simple-git-hooks
pnpm add --save-dev simple-git-hooks pretty-quick
node --eval "fs.writeFileSync('.simple-git-hooks.json',JSON.stringify({'pre-commit':'pnpm pretty-quick --staged'},undefined,2)+'\n')"
pnpm simple-git-hooks
bun add --dev simple-git-hooks pretty-quick
node --eval "fs.writeFileSync('.simple-git-hooks.json',JSON.stringify({'pre-commit':'bun pretty-quick --staged'},undefined,2)+'\n')"
bun simple-git-hooks
Pour en savoir plus, consultez le dépôt pretty-quick.
Option 3. Husky.Net
Cas d'utilisation : Une solution .NET pour utiliser Prettier avec d'autres outils de qualité de code (ex. dotnet-format, ESLint, Stylelint, etc.). Prend en charge plusieurs états de fichiers (staged - dernier commit, git-files, etc.).
dotnet new tool-manifest
dotnet tool install husky
dotnet husky install
dotnet husky add pre-commit
Après l'installation, vous pouvez ajouter la tâche prettier au task-runner.json.
{
"command": "npx",
"args": ["prettier", "--ignore-unknown", "--write", "${staged}"],
"pathMode": "absolute"
}
Option 4. git-format-staged
Cas d'utilisation : Parfait lorsque vous voulez formater des fichiers partiellement mis en staging et qu'aucune autre option ne convient à votre projet.
Git-format-staged exécute tout formateur acceptant le contenu via stdin. Son fonctionnement diffère des autres outils pour les fichiers partiellement mis en staging : il applique le formateur directement aux objets de la base de données Git et fusionne les modifications dans l'arbre de travail. Cette procédure offre plusieurs garanties :
-
Les modifications dans les commits sont toujours formatées.
-
Les modifications non mises en staging ne sont jamais ajoutées durant le processus.
-
En cas de conflits entre modifications formatées (staging) et non formatées (working tree), vos fichiers locaux restent intacts - votre travail n'est pas écrasé et aucune stash n'est créée.
-
Les modifications non mises en staging ne sont pas formatées.
Git-format-staged nécessite Python v3 ou v2.7. Python est généralement préinstallé sur Linux/macOS, mais pas sur Windows. Utilisez-le avec 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')"
Ajoutez/supprimez des extensions selon votre projet. Le formatage respectera toujours les fichiers .prettierignore, quelles que soient les extensions listées.
Pour comprendre son fonctionnement, consultez Automatic Code Formatting for Partially-Staged Files.
Option 5. Script shell
Alternativement, enregistrez ce script comme .git/hooks/pre-commit et donnez-lui les permissions d'exécution :
#!/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
Si git indique que vos fichiers formatés restent modifiés après un commit, vous devrez peut-être ajouter un script post-commit pour mettre à jour l'index de git.
Ajoutez un code similaire au suivant dans .git/hooks/post-commit :
#!/bin/sh
git update-index -g