Warum Pre-Commit-Hooks
Der gunstigste Ort, einen Lint-Fehler zu fangen, ist auf der Maschine des Entwicklers.
Der einfachste Hook
# .git/hooks/pre-commit
#!/usr/bin/env bash
set -e
npm run lint --silent
npm run format:check --silent
chmod +x .git/hooks/pre-commit
Nur geanderte Dateien linten
#!/usr/bin/env bash
set -e
files=$(git diff --cached --name-only --diff-filter=ACMR | grep -E '\\.(js|ts|tsx)$' || true)
if [ -z "$files" ]; then
exit 0
fi
echo "$files" | xargs npx eslint --max-warnings=0
echo "$files" | xargs npx prettier --check
Husky fur Node-Projekte
npm install --save-dev husky lint-staged
npx husky init
# .husky/pre-commit
npx lint-staged
# package.json
"lint-staged": {
"*.{js,ts,tsx}": ["eslint --fix", "prettier --write"]
}
Das pre-commit Framework
# .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-merge-conflict
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.5.0
hooks:
- id: ruff
- id: ruff-format
pip install pre-commit
pre-commit install
Hooks via core.hooksPath teilen
git config core.hooksPath .githooks
Bei Bedarf umgehen
git commit --no-verify -m "WIP"
Haufige Pre-Commit-Checks
- Lint und Format.
- Type-Checks.
- Trailing Whitespace.
- Merge-Konflikt-Marker.
- Geheimnis-Erkennung.
- Datei-Grossenlimits.