Wszystkie commit message repozytorium Angulara ma jakieś dziwne prefiksy. Dlaczego? O tym w dzisiejszym wpisie.
Prefiksy
Jeśli każdy Commit Message będzie posiadał jeden prefiks z listy dostępnych:
feat: ...- nowa funkcjonalnośćfix: ...- poprawka błędudocs: ...- dokumentacjastyle: ...- formatowanie, brakujące średniki itp.refactor: ...- refaktoryzacjaperf: ...- poprawa wydajnościtest: ...- dodanie brakujących testówbuild: ...- system budowania i zależnościci: ...- konfiguracja CIchore: ...- prace porządkowerevert: ...- wycofanie wcześniejszej rewizji
Opcjonalnie po typie można w nawiasie podać zakres (ang. scope), czyli część
projektu, której dotyczy zmiana, np. feat(parser): ....
to wygenerowanie changeloga z podziałem na typ będzie przyjemnością.
Jakie kroki są potrzebne, aby używać takiego workflow:
- Tworzyć Commit Message-e z prefiksem
- Wygenerować
CHANGELOG.md
Aby nie zapomnieć o typie podczas tworzenia rewizji wykorzystajmy dwa narzędzia:
husky— podłączenie się pod zdarzenie tworzenia rewizjicommitlint— weryfikacja treści Commit Message-a
Do wygenerowania changeloga przedstawię 4 narzędzia.
1. commitlint
-
Instalacja
npm install -D @commitlint/config-conventional @commitlint/cli -
Stworzyć plik
commitlint.config.jso zawartości:module.exports = { extends: ['@commitlint/config-conventional'] };
2. husky
-
Instalacja
npm install -D husky npx husky initPolecenie
npx husky inittworzy katalog.husky/i dopisuje dopackage.jsonskryptprepare, który włącza hooki ponpm install. -
Stworzyć hook
.husky/commit-msg, który sprawdzi treść Commit Message-a:echo 'npx --no -- commitlint --edit "$1"' > .husky/commit-msg
Aktualizacja: 2026-09-26
W 2019 roku (husky do wersji 4) hooki konfigurowało się w package.json
w polu "husky": { "hooks": { ... } }. Od wersji 5 husky ignoruje to pole,
więc taki hook po cichu się nie uruchomi. Powyższa instrukcja dotyczy husky 9.
3. Changelog
Opcja nr 1 — git-changelog
-
Instalacja
npm install -D git-changelog -
Dodać zadanie w
package.json:{ "scripts": { "changelog": "git-changelog -e" } } -
Stworzyć plik .changelogrc. Format pliku dostępny w linku.
Uwaga: Brakuje wsparcia dla grupowania rewizji.
Opcja nr 2 — generate-changelog
-
Instalacja
npm i -D generate-changelog -
Dodać do pliku
package.jsonrekomendowane zadania:{ "scripts": { "release:major": "changelog -M && git add CHANGELOG.md && git commit -m 'Regenerate CHANGELOG.md' && npm version major && git push origin && git push origin --tags", "release:minor": "changelog -m && git add CHANGELOG.md && git commit -m 'Regenerate CHANGELOG.md' && npm version minor && git push origin && git push origin --tags", "release:patch": "changelog -p && git add CHANGELOG.md && git commit -m 'Regenerate CHANGELOG.md' && npm version patch && git push origin && git push origin --tags" } }
Uwaga: Brakuje wsparcia dla grupowania rewizji.
Opcja nr 3 — auto-changelog
-
Instalacja
npm install -D auto-changelog -
Dodać zadanie w
package.json:{ "scripts": { "changelog": "auto-changelog -u -l false" } }
Uwaga: Posiada wsparcie dla prefiksów.
Uwaga: Posiada wsparcie dla grupowania rewizji.
Przykład pracy auto-changeloga jest widoczny w bibliotece
super-event-emitter.
Opcja nr 4 — REKOMENDOWANA — conventional-changelog
-
Instalacja
npm install -D conventional-changelog-cli -
Dodać zadanie w
package.json:{ "scripts": { "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0" } }
Uwaga: Posiada wsparcie dla ROŻNYCH typów prefiksów.
Uwaga: Posiada wsparcie dla grupowania rewizji.
Rozwiązanie problemu release bez changeloga
Jeśli zdefiniujemy zadanie version w run-scripts w package.json,
to podczas uruchamiania npm version [major|minor|patch], zadanie zostanie
wykonane przed stworzeniem nowej rewizji oraz taga. Jeśli dowolny plik będzie
dodany do “Git Stage”, to npm version [major|minor|patch] doda ten plik
do rewizji z podbiciem wersji.
Przykład rekomendowanego sposobu:
{
"scripts": {
"version": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md"
}
}
Więcej do poczytania na stronie projektu conventional-changelog
•
Narzędzia do zbudowania pliku CHANGELOG.md mogą być używane bez dodawania typów
w Commit Message-u, tylko wtedy nie będzie pogrupowanych rewizji i wszystkie
zostaną wrzucone do jednego worka.
Cya! 👋