FörbÀttra kvaliteten pÄ din JavaScript-kod med pre-commit-hooks. LÀr dig konfigurera och implementera kvalitetsgrindar för renare, mer underhÄllbara projekt.
Kvalitetsgrindar för JavaScript-kod: BemÀstra konfigurationen av pre-commit-hooks
I den stÀndigt förÀnderliga vÀrlden av mjukvaruutveckling Àr det av yttersta vikt att upprÀtthÄlla hög kodkvalitet. Ren, vÀlformaterad och felfri kod minskar inte bara underhÄllskostnaderna utan frÀmjar ocksÄ samarbete och pÄskyndar utvecklingscykler. En kraftfull teknik för att upprÀtthÄlla kodkvalitet Àr implementeringen av kvalitetsgrindar med hjÀlp av pre-commit-hooks. Denna artikel ger en omfattande guide till att konfigurera pre-commit-hooks för JavaScript-projekt, vilket gör att du kan automatisera kodkvalitetskontroller innan koden ens nÄr ditt repository.
Vad Àr pre-commit-hooks?
Git-hooks Àr skript som Git kör före eller efter hÀndelser som commit, push och receive. Specifikt körs pre-commit-hooks innan en commit slutförs. De erbjuder en avgörande möjlighet att inspektera de Àndringar som ska committas och förhindra commits som inte uppfyller fördefinierade kvalitetsstandarder. Se dem som grindvakter som förhindrar lÄgkvalitativ kod frÄn att komma in i din kodbas.
Varför anvÀnda pre-commit-hooks för JavaScript-kodkvalitet?
- Tidig felupptÀckt: Pre-commit-hooks fÄngar upp problem med kodkvaliteten tidigt i utvecklingsprocessen och förhindrar att de sprids vidare. Detta Àr mycket effektivare Àn att upptÀcka problem under kodgranskningar eller, Ànnu vÀrre, i produktion.
- Automatiserad kodformatering: SÀkerstÀll en konsekvent kodstil i hela teamet och projektet. Automatisk formatering förhindrar stilistiska debatter och bidrar till en mer lÀsbar kodbas.
- Minskad börda vid kodgranskning: Genom att automatiskt upprÀtthÄlla kodningsstandarder minskar pre-commit-hooks bördan för kodgranskare, vilket gör att de kan fokusera pÄ arkitekturbeslut och komplex logik.
- FörbÀttrad underhÄllbarhet av kod: En konsekvent och högkvalitativ kodbas Àr lÀttare att underhÄlla och utveckla över tid.
- PĂ„tvingad enhetlighet: De sĂ€kerstĂ€ller att all kod följer projektets standarder, oavsett vilken utvecklare som skrev den. Detta Ă€r sĂ€rskilt viktigt i distribuerade team som arbetar frĂ„n olika platser â sĂ€g, London, Tokyo och Buenos Aires â dĂ€r individuella kodstilar kan variera.
Viktiga verktyg för JavaScript-kodkvalitet
Flera verktyg anvÀnds ofta i samband med pre-commit-hooks för att automatisera kvalitetskontroller av JavaScript-kod:
- ESLint: En kraftfull JavaScript-linter som identifierar potentiella fel, upprÀtthÄller kodstilar och hjÀlper till att förbÀttra kodens lÀsbarhet. Den stöder ett brett utbud av regler och Àr mycket konfigurerbar.
- Prettier: En Äsiktsdriven kodformaterare som automatiskt formaterar kod för att följa en konsekvent stil. Den stöder JavaScript, TypeScript, JSX och mÄnga andra sprÄk.
- Husky: Ett verktyg som gör det enkelt att hantera Git-hooks. Det lÄter dig definiera skript som kommer att köras i olika skeden av Git-arbetsflödet.
- lint-staged: Ett verktyg som kör linters och formaterare endast pÄ 'staged' filer, vilket avsevÀrt pÄskyndar pre-commit-processen. Detta förhindrar onödiga kontroller av oförÀndrade filer.
Konfigurera pre-commit-hooks: En steg-för-steg-guide
HÀr Àr en detaljerad guide om hur du stÀller in pre-commit-hooks för ditt JavaScript-projekt med Husky och lint-staged:
Steg 1: Installera beroenden
Installera först de nödvÀndiga paketen som utvecklingsberoenden med npm eller yarn:
npm install --save-dev husky lint-staged eslint prettier
Eller, med yarn:
yarn add --dev husky lint-staged eslint prettier
Steg 2: Initiera Husky
Husky förenklar processen att hantera Git-hooks. Initiera det med följande kommando:
npx husky install
Detta kommer att skapa en `.husky`-katalog i ditt projekt, som kommer att lagra dina Git-hooks.
Steg 3: Konfigurera pre-commit-hook
LĂ€gg till en pre-commit-hook med Husky:
npx husky add .husky/pre-commit "npx lint-staged"
Detta kommando skapar en `pre-commit`-fil i `.husky`-katalogen och lÀgger till kommandot `npx lint-staged` i den. Detta talar om för Git att köra lint-staged före varje commit.
Steg 4: Konfigurera lint-staged
lint-staged lÄter dig köra linters och formaterare endast pÄ de 'staged' filerna, vilket avsevÀrt pÄskyndar pre-commit-processen. Skapa en `lint-staged.config.js` (eller `lint-staged.config.mjs` för ES-moduler) fil i din projekt-rot och konfigurera den enligt följande:
module.exports = {
'*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'],
};
Denna konfiguration talar om för lint-staged att köra ESLint och Prettier pÄ alla 'staged' JavaScript- och TypeScript-filer. `--fix`-flaggan i ESLint korrigerar automatiskt alla lintingfel som kan korrigeras automatiskt, och `--write`-flaggan i Prettier formaterar filerna och skriver över dem med den formaterade koden.
Alternativt kan du definiera konfigurationen direkt i din `package.json`-fil:
{
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
]
}
}
Steg 5: Konfigurera ESLint
Om du inte redan har gjort det, konfigurera ESLint för ditt projekt. Du kan skapa en ESLint-konfigurationsfil med följande kommando:
npx eslint --init
Detta guidar dig genom processen att skapa en ESLint-konfigurationsfil (`.eslintrc.js`, `.eslintrc.json`, eller `.eslintrc.yml`) baserat pÄ ditt projekts krav. Du kan vÀlja mellan en mÀngd fördefinierade konfigurationer eller skapa dina egna anpassade regler.
Exempel pÄ `.eslintrc.js`:
module.exports = {
env: {
browser: true,
es2021: true,
node: true
},
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
'prettier'
],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true
},
ecmaVersion: 12,
sourceType: 'module'
},
plugins: [
'react',
'@typescript-eslint'
],
rules: {
'no-unused-vars': 'warn',
'react/prop-types': 'off'
}
};
Denna konfiguration utökar de rekommenderade ESLint-reglerna, de rekommenderade React-reglerna, de rekommenderade TypeScript-reglerna och integreras med Prettier. Den inaktiverar ocksÄ `react/prop-types`-regeln och sÀtter `no-unused-vars`-regeln till en varning.
Steg 6: Konfigurera Prettier
Konfigurera Prettier genom att skapa en `.prettierrc.js` (eller `.prettierrc.json`, `.prettierrc.yml`, eller `.prettierrc.toml`) fil i din projekt-rot. Du kan anpassa Prettiers formateringsalternativ för att matcha ditt projekts stilriktlinjer.
Exempel pÄ `.prettierrc.js`:
module.exports = {
semi: false,
trailingComma: 'all',
singleQuote: true,
printWidth: 120,
tabWidth: 2
};
Denna konfiguration stÀller in Prettier att anvÀnda enkla citattecken, inga semikolon, avslutande kommatecken, en utskriftsbredd pÄ 120 tecken och en tabbredd pÄ 2 blanksteg.
Alternativt kan du definiera Prettier-konfigurationen inuti `package.json`:
{
"prettier": {
"semi": false,
"trailingComma": "all",
"singleQuote": true,
"printWidth": 120,
"tabWidth": 2
}
}
Steg 7: Testa din konfiguration
För att testa din konfiguration, 'stage'a nÄgra Àndringar och försök att committa dem. Till exempel:
git add .
git commit -m "Testa pre-commit-hook"
Om det finns nÄgra linting- eller formateringsproblem kommer ESLint och Prettier automatiskt att ÄtgÀrda dem (om möjligt) eller rapportera fel. Om fel rapporteras kommer committen att avbrytas, vilket gör att du kan ÄtgÀrda problemen innan du committar igen.
Avancerade konfigurationsalternativ
AnvÀnda olika linters och formaterare
Du kan enkelt integrera andra linters och formaterare i din konfiguration för pre-commit-hooks. Du kan till exempel anvÀnda Stylelint för att linta CSS- eller SASS-filer:
npm install --save-dev stylelint stylelint-config-standard
Uppdatera sedan din `lint-staged.config.js`-fil för att inkludera Stylelint:
module.exports = {
'*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'],
'*.{css,scss}': ['stylelint --fix'],
};
Köra tester före commit
Du kan ocksÄ köra dina enhetstester som en del av pre-commit-hooken. Detta hjÀlper till att sÀkerstÀlla att din kod fungerar korrekt innan den committas. Om vi antar att du anvÀnder Jest:
npm install --save-dev jest
Uppdatera din `lint-staged.config.js`-fil för att inkludera testkommandot:
module.exports = {
'*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write', 'jest --findRelatedTests'],
'*.{css,scss}': ['stylelint --fix'],
};
`--findRelatedTests`-flaggan talar om för Jest att endast köra tester som Àr relaterade till de Àndrade filerna, vilket avsevÀrt pÄskyndar processen.
Hoppa över pre-commit-hooks
I vissa fall kanske du vill hoppa över pre-commit-hooks tillfÀlligt. Du kan göra detta genom att anvÀnda `--no-verify`-flaggan med `git commit`-kommandot:
git commit --no-verify -m "Commit-meddelande"
Det rekommenderas dock generellt att undvika att hoppa över hooks om det inte Àr absolut nödvÀndigt, eftersom de spelar en avgörande roll för att upprÀtthÄlla kodkvaliteten.
Felsökning av vanliga problem
- Hooks körs inte: Se till att Husky Àr korrekt installerat och initierat, och att `.husky`-katalogen finns i din projekt-rot. Verifiera ocksÄ att `pre-commit`-filen i `.husky`-katalogen Àr körbar.
- Lintingfel korrigeras inte: Se till att `--fix`-flaggan anvÀnds med ESLint, och att din ESLint-konfiguration Àr instÀlld för att automatiskt korrigera vissa typer av fel.
- Prettier formaterar inte filer: Se till att `--write`-flaggan anvÀnds med Prettier, och att din Prettier-konfiguration Àr korrekt instÀlld.
- LĂ„ngsamma pre-commit-hooks: AnvĂ€nd lint-staged för att endast köra linters och formaterare pĂ„ 'staged' filer. ĂvervĂ€g ocksĂ„ att optimera dina ESLint- och Prettier-konfigurationer för att minimera antalet regler och instĂ€llningar som kontrolleras.
- Konflikterande konfigurationer: Se till att dina ESLint- och Prettier-konfigurationer inte stĂ„r i konflikt med varandra. Om de gör det kan du behöva justera en eller bĂ„da konfigurationerna för att lösa konflikterna. ĂvervĂ€g att anvĂ€nda en delad konfiguration som `eslint-config-prettier` och `eslint-plugin-prettier` för att undvika konflikter.
BÀsta praxis för pre-commit-hooks
- HÄll hooks snabba: LÄngsamma hooks kan avsevÀrt pÄverka utvecklarnas produktivitet. AnvÀnd lint-staged för att endast bearbeta 'staged' filer och optimera dina linter- och formaterarkonfigurationer.
- Ge tydliga felmeddelanden: NÀr en hook misslyckas, ge tydliga och informativa felmeddelanden för att vÀgleda utvecklare om hur de ska ÄtgÀrda problemen.
- Automatisera sÄ mycket som möjligt: Automatisera kodformatering och linting för att minimera manuellt arbete och sÀkerstÀlla enhetlighet.
- Utbilda ditt team: Se till att alla teammedlemmar förstÄr syftet med pre-commit-hooks och hur man anvÀnder dem effektivt.
- AnvĂ€nd en enhetlig konfiguration: UpprĂ€tthĂ„ll en konsekvent konfiguration för ESLint, Prettier och andra verktyg i hela ditt projekt. Detta hjĂ€lper till att sĂ€kerstĂ€lla att all kod formateras och lintas pĂ„ samma sĂ€tt. ĂvervĂ€g att anvĂ€nda ett delat konfigurationspaket som enkelt kan installeras och uppdateras över flera projekt.
- Testa dina hooks: Testa regelbundet dina pre-commit-hooks för att sÀkerstÀlla att de fungerar korrekt och att de inte orsakar nÄgra ovÀntade problem.
Globala övervÀganden
NÀr du arbetar i globalt distribuerade team, övervÀg följande:
- Enhetliga verktygsversioner: Se till att alla teammedlemmar anvÀnder samma versioner av ESLint, Prettier, Husky och lint-staged. Detta kan uppnÄs genom att specificera versionerna i din `package.json`-fil och anvÀnda en pakethanterare som npm eller yarn för att installera beroendena.
- Plattformsoberoende kompatibilitet: Testa dina pre-commit-hooks pÄ olika operativsystem (Windows, macOS, Linux) för att sÀkerstÀlla att de fungerar korrekt pÄ alla plattformar. AnvÀnd plattformsoberoende verktyg och kommandon nÀr det Àr möjligt.
- Tidsskillnader: Var medveten om tidsskillnader nÀr du kommunicerar med teammedlemmar om problem med pre-commit-hooks. Ge tydliga instruktioner och exempel för att hjÀlpa dem att lösa problemen snabbt.
- SprÄkstöd: Om ditt projekt innebÀr arbete med flera sprÄk, se till att dina pre-commit-hooks stöder alla sprÄk som anvÀnds i projektet. Du kan behöva installera ytterligare linters och formaterare för varje sprÄk.
Slutsats
Att implementera pre-commit-hooks Àr ett effektivt sÀtt att upprÀtthÄlla kodkvalitet, förbÀttra teamsamarbete och minska underhÄllskostnader i JavaScript-projekt. Genom att integrera verktyg som ESLint, Prettier, Husky och lint-staged kan du automatisera kodformatering, linting och testning, vilket sÀkerstÀller att endast högkvalitativ kod committas till ditt repository. Genom att följa stegen i denna guide kan du sÀtta upp en robust kvalitetsgrind som hjÀlper dig att bygga renare, mer underhÄllbara och mer tillförlitliga JavaScript-applikationer. Omfamna denna praxis och lyft ditt teams utvecklingsflöde idag.