Generator konfiguracji commitlint
Gotowy commitlint.config.js: preset, długość nagłówka i reguły opisu
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator konfiguracji commitlint
Generator commitlint tworzy gotowy plik commitlint.config.js z regułami konwencji commitów. Wybierasz preset, limit nagłówka i dodatkowe reguły, a narzędzie dopisuje też fragment package.json z zależnościami.
Czym jest commitlint?
commitlint sprawdza, czy komunikaty commitów spełniają ustaloną konwencję: typ, zakres i opis. Połączenie z hookiem Husky blokuje commity niepoprawne formatowo, co utrzymuje czytelny i spójny historię repozytorium — przydatny w changelogach i semantycznym wersjonowaniu.
| Preset | Charakterystyka |
|---|---|
| Conventional Commits | standard industry: feat, fix, docs, refactor, chore… |
| Angular | źródło konwencji Conventional, nieco inne domyślne reguły |
| Lerna scopes | waliduje zakresy zgodne z pakietami w monorepo |
Przykład poprawnego commita
feat(auth): add password reset flow — typ, zakres w nawiasie, dwukropek i opis małymi literami bez kropki. Generator wymusza te zasady regułami header-max-length, subject-case i subject-full-stop.
Jak generator składa konfigurację commitlint
Generator zbiera trzy decyzje: preset, limit nagłówka oraz zestaw dodatkowych reguł. Na tej podstawie składa plik commitlint.config.js, w którym sekcja extends wskazuje pakiet wybranego presetu, a sekcja rules zawiera reguły nadpisujące lub uzupełniające ten preset. Do wyniku dołączany jest fragment package.json z zależnością odpowiadającą wybranemu pakietowi, więc od razu widzisz, co trzeba dopisać do devDependencies.
Sam commitlint działa już na zapisanym komunikacie. Hook commit-msg przekazuje mu ścieżkę do pliku z treścią commita, a walidator rozbija tekst na typ, zakres, opis i pozostałe części, po czym sprawdza je reguła po regule. Gdy któraś reguła zawiedzie, narzędzie wypisuje jej nazwę oraz znalezioną wartość, a hook przerywa tworzenie commita. Dlatego konfiguracja musi być kompletna: brak wpisu w rules oznacza, że dana zasada po prostu nie jest egzekwowana.
Preset to gotowy zestaw reguł dostarczany w osobnym pakiecie npm, a extends oznacza dziedziczenie tych ustawień. Reguły wpisane w sekcji rules mają pierwszeństwo nad presetem, dzięki czemu generator może wymuszać własne wartości dla limitu nagłówka, wielkości liter w opisie i kropki na końcu. Nazwa pakietu w extends musi zgadzać się z tym, co trafi do devDependencies — jeśli się rozjadą, Node nie znajdzie modułu i commitlint zakończy pracę błędem, jeszcze przed sprawdzeniem jakiegokolwiek commita.
Przykład krok po kroku: od wyboru presetu do zapasu w limicie
- Wybierasz preset Conventional Commits. W wyniku pojawia się jedna zależność: @commitlint/config-conventional, a w pliku wpis extends z tym pakietem.
- Ustawiasz limit nagłówka na 72 znaki. To dolna granica przedziału 72-100 zalecanego przez konwencję, więc zostawia miejsce na nieco dłuższe opisy bez wychodzenia poza bezpieczną długość.
- Testowy nagłówek feat(auth): add password reset flow ma dokładnie 35 znaków: 10 na typ i zakres (feat(auth)), 2 na dwukropek ze spacją oraz 23 na opis. Do limitu 72 zostaje 37 znaków zapasu.
- Wydłużasz opis do 60 znaków. Nagłówek liczy wtedy 72 znaki (10 + 2 + 60), czyli dokładnie tyle, ile wynosi limit — reguła header-max-length przepuszcza taki commit, bo przekroczenie wynosi 0.
- Dopisujesz jeszcze jedno słowo i nagłówek rośnie do 80 znaków. Limit 72 zostaje przekroczony o 8 znaków, reguła header-max-length zwraca błąd, a hook commit-msg przerywa operację — commit nie powstaje.
- Skracasz opis tak, aby cały nagłówek liczył 65 znaków. Warunek 65 mniejszy lub równy 72 jest spełniony, walidacja przechodzi, a gotowy plik commitlint.config.js i fragment package.json kopiujesz do repozytorium.
Presety w generatorze: klucz, etykieta i pakiet
| Klucz presetu | Co trafia do konfiguracji | Wartość |
|---|---|---|
| conventional | Pakiet w extends oraz w devDependencies | @commitlint/config-conventional |
| conventional | Etykieta widoczna w generatorze | Conventional Commits |
| angular | Pakiet w extends oraz w devDependencies | @commitlint/config-angular |
| angular | Etykieta widoczna w generatorze | Angular |
| lerna | Pakiet w extends oraz w devDependencies | @commitlint/config-lerna-scopes |
| lerna | Etykieta widoczna w generatorze | Lerna (scopes monorepo) |
Praktyczne wskazówki przy generowaniu configu
- Jeden preset na repozytorium — łączenie config-conventional z config-angular daje sprzeczne reguły i komunikaty o błędach, których nikt nie potrafi wyjaśnić. Wybierz preset odpowiadający zespołowi i trzymaj się go w całym projekcie.
- Preset Lerna tylko w prawdziwym monorepo — config-lerna-scopes czerpie zakresy z pakietów w repozytorium, więc w zwykłym projekcie nie ma z czego ich brać. W pojedynczym repozytorium bezpieczniej zostać przy Conventional Commits.
- Limit nagłówka ustawiaj z zapasem — wartość blisko górnej granicy oznacza, że prawie każdy dłuższy opis będzie wymagał skracania, a poprawianie commita w trakcie pracy irytuje bardziej niż sam limit. Krótszy limit wymusza zwięzłe pisanie.
- Przetestuj konfigurację przed pierwszym commitem — wrzuć wygenerowany plik do repozytorium i przepuść przez walidator przykładowy komunikat, zanim hook zacznie blokować pracę całemu zespołowi. Poprawki w configu są tańsze niż zbiorcze przepisywanie historii.
- Traktuj plik configu jak kod — leży w repozytorium, podlega przeglądowi i nie trafia do .gitignore. Dzięki temu każdy klon ma identyczne reguły, a zmiana konwencji jest widoczna w historii zmian.
Czego generator nie zrobi za ciebie
- Nie instaluje zależności — narzędzie tylko wypisuje fragment package.json z pakietem wybranego presetu. Instalację pakietu oraz podpięcie hooka commit-msg wykonujesz samodzielnie w repozytorium.
- Nie zna struktury twojego projektu — poza presetem Lerna nie sprawdza, czy zakres wpisany w nawiasie istnieje w repozytorium ani czy jest sensowny. Walidacja formatu to nie to samo co walidacja znaczenia.
- Nie ocenia treści komunikatu — commit w rodzaju fix: poprawka przejdzie wszystkie reguły mimo braku informacji o zmianie. O jakości opisów decyduje zespół i przegląd kodu, nie walidator.
- Nie konfiguruje hooków ani CI — plik configu to jedna warstwa. Bez hooka w repozytorium i bez kroku w pipeline commitlint nie uruchomi się sam, a błędy formatu przejdą niezauważone aż do wdrożenia.
Najczęstsze pytania
Jak podpiąć commitlint do Husky?
Zainstaluj Husky, dodaj hook commit-msg z komendą npx --no -- commitlint --edit $1. Generator dostarcza config i zależności; hook dopisujesz w repo.
Czy można dodać własne typy commitów?
Tak — w regule type-enum podaj listę dozwolonych typów. Standardowo są to feat, fix, docs, style, refactor, perf, test, build, ci, chore i revert.
Dlaczego limit 100 znaków?
Krótkie nagłówki czytają się w git log i GitHub. Conventional zaleca 72-100 znaków; generator pozwala ustawić 20-200.
Jak wyłączyć commitlint dla jednego commita?
Dopisz --no-verify do komendy git commit, na przykład git commit --no-verify -m Twoj komunikat. Hook commit-msg nie zostanie uruchomiony, więc walidacja się nie wykona. Pamiętaj, że jeśli commitlint działa też w pipeline, commit nadal może zostać odrzucony w CI.
Dlaczego commitlint nie widzi pliku commitlint.config.js?
Najczęstsza przyczyna to pole type ustawione na module w package.json — Node traktuje wtedy pliki .js jako moduły ES i nie odczyta zapisu module.exports. Zmień rozszerzenie pliku na .cjs albo zapisz konfigurację w składni eksportu modułów ES.
Czy commitlint działa w monorepo?
Tak. Preset Lerna (scopes monorepo) dodaje pakiet @commitlint/config-lerna-scopes, który waliduje zakresy zgodnie z pakietami w repozytorium. W repozytoriach opartych na innych rozwiązaniach niż Lerna wybierz Conventional Commits, a listę dozwolonych zakresów dopisz sam w sekcji rules.
Czy można używać commitlint tylko w CI, bez Husky?
Tak. Ten sam plik commitlint.config.js wystarczy, aby uruchomić walidację w pipeline na commitach z danego wypchnięcia. Wersja z hookiem daje jednak szybszą informację zwrotną, jeszcze przed wysłaniem zmian do repozytorium zdalnego.
Co się dzieje, gdy commit nie przejdzie walidacji?
commitlint wypisuje w terminalu nazwę reguły, która zawiodła, oraz znalezioną wartość, a hook commit-msg przerywa operację — commit nie powstaje. Poprawiasz komunikat i powtarzasz git commit, bez konieczności cofania niczego w repozytorium.