Aller au contenu principal

Crochet de pré-commit

Traduction Bêta Non Officielle

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

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 :

  1. Les modifications dans les commits sont toujours formatées.

  2. Les modifications non mises en staging ne sont jamais ajoutées durant le processus.

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

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

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

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