- Gepubliceerd op
Wat is een linter? ESLint begrijpen en waarom het belangrijk is voor schone code
- Auteurs
Wat is een linter? ESLint begrijpen en waarom het belangrijk is voor schone code
Wanneer meerdere ontwikkelaars aan dezelfde codebase werken, kunnen inconsistenties in stijl en verborgen fouten zich snel opstapelen.
Daar komen linters van pas: ze controleren je code automatisch op mogelijke problemen en dwingen een consistente stijl af binnen je project.
In dit artikel onderzoeken we wat een linter is, waarom je er een zou moeten gebruiken en waarom ESLint de aangewezen tool is geworden in het JavaScript- en TypeScript-ecosysteem.
Wat linters detecteren
Een linter analyseert je code en detecteert verschillende categorieën problemen voordat ze bugs of inconsistenties veroorzaken.
Syntaxisfouten → Problemen die code ongeldig of onuitvoerbaar maken. Voorbeelden:
- Ontbrekende ronde of vierkante haakjes →
if (user.isLoggedIn { - Niet-afgesloten tekenreeksen →
console.log("Hello) - Verkeerd geplaatste of ontbrekende
return-instructies.
- Ontbrekende ronde of vierkante haakjes →
Problemen met codekwaliteit → Patronen die de syntaxis niet breken, maar tot runtimefouten of verwarring kunnen leiden. Voorbeelden:
- Ongebruikte variabelen →
const result = computeValue();declareren maarresultnooit gebruiken. - Onbereikbare code → Instructies na een
returnplaatsen. - Overschaduwde variabelen → Een variabelenaam uit een bovenliggende scope opnieuw gebruiken.
- Ongebruikte variabelen →
Inconsistenties in stijl → Verschillen in opmaak en stijl die code moeilijker leesbaar maken. Voorbeelden:
- Ontbrekende puntkomma's of inconsistente inspringing.
"double quotes"in het ene bestand en'single quotes'in een ander gebruiken.- Tabs en spaties mengen voor inspringing.
Schendingen van best practices → Code die technisch werkt, maar tegen aanbevolen patronen ingaat. Voorbeelden:
- Verouderde API's gebruiken (bijvoorbeeld
ReactDOM.render()in React 18). vargebruiken in plaats vanletofconst.- Asynchrone functies aanroepen zonder
await. ==gebruiken in plaats van===, wat subtiele bugs door typeconversie kan veroorzaken.
- Verouderde API's gebruiken (bijvoorbeeld
Linters zoals ESLint doen meer dan fouten opsporen: ze dwingen conventies af en voorkomen dat slechte gewoonten ooit in je repository terechtkomen.
Waarom een linter gebruiken?
1. Fouten vroeg opsporen
Linters detecteren problemen voordat je app zelfs maar draait.
ESLint kan je bijvoorbeeld waarschuwen voor een ongedefinieerde variabele of een ontbrekende await in een asynchrone functie, waardoor je later tijd bespaart bij het opsporen van fouten.
2. Consistentie waarborgen
Een linter dwingt een uniforme codeerstijl af binnen je team en voorkomt onnodige discussies over tabs versus spaties of de plaatsing van komma's.
3. Codekwaliteit verbeteren
Linters stimuleren schonere, beter onderhoudbare code door te waarschuwen voor complexe of riskante patronen (zoals diep geneste callbacks of ongebruikte imports).
4. Integreren in je workflow
Ze draaien automatisch in je IDE, tijdens commits (via pre-commithooks zoals Husky) of in CI/CD-pijplijnen en houden je codebase bij elke stap schoon.
Aandacht voor ESLint: de standaard voor JavaScript en TypeScript
ESLint is de populairste linter in het JavaScript-ecosysteem en wordt veel gebruikt voor React-, Node.js- en TypeScript-projecten.
🔧 Belangrijkste functies
- Uitgebreid configureerbaar → Pas elke regel aan je stijl aan.
- Pluginecosysteem → Breid uit met communityplugins (bijvoorbeeld React, Jest, beveiliging, toegankelijkheid).
- TypeScript-ondersteuning → Volledige integratie via
@typescript-eslint. - Automatisch herstelbare regels → Veel problemen kunnen automatisch worden opgelost met:
npx eslint . --fix - Integraties → Werkt met VS Code, WebStorm, GitHub Actions en vrijwel elk CI-systeem.
ESLint configureren
Je kunt ESLint in je project instellen met:
npx eslint --init
Als je ESLint v8.23 of hoger gebruikt, maakt deze opdracht een Flat Config-bestand met de naam eslint.config.mjs (in plaats van het oudere .eslintrc.json-formaat). Dit moderne formaat gebruikt JavaScript-modules en biedt betere prestaties en duidelijkheid.
Hier is een eenvoudige voorbeeldconfiguratie die je zou kunnen gebruiken in een Next.js + TypeScript-project:
// eslint.config.mjs
import js from '@eslint/js'
import tseslint from 'typescript-eslint'
import prettier from 'eslint-config-prettier'
import { FlatCompat } from '@eslint/eslintrc'
const compat = new FlatCompat({ baseDirectory: import.meta.dirname })
export default [
js.configs.recommended, // Core JavaScript best practices
...tseslint.configs.recommended, // TypeScript-specific linting
...compat.extends('next/core-web-vitals'), // Next.js and React recommendations
prettier, // Avoid rule conflicts with Prettier
{
files: ['**/*.{js,jsx,ts,tsx}'],
rules: {
'no-console': ['warn', { allow: ['warn', 'error'] }],
'@typescript-eslint/no-unused-vars': [
'warn',
{ argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
],
semi: ['error', 'always'],
},
},
]
Uitleg
Laten we bekijken wat er gebeurt:
js.configs.recommended
Laadt de aanbevolen kernregels van ESLint voor algemene JavaScript-problemen, zoals:
- Ongebruikte variabelen
- Onbereikbare code
- Ontbrekende return-instructies
- Syntaxisfouten
tseslint.configs.recommended
Voegt regels met TypeScript-kennis toe die bijvoorbeeld het volgende opsporen:
- Ongebruikte imports
- Onjuist gebruik van typen
- Variabelen die in
.ts/.tsx-bestanden zijn gedeclareerd maar nooit worden gebruikt
compat.extends('next/core-web-vitals')
Past Next.js- en React-regels toe, waaronder:
- Best practices voor toegankelijkheid (a11y)
- Controles op het gebruik van React Hooks
- Waarschuwingen voor prestatieproblemen (zoals
<img>gebruiken in plaats van<Image>)
prettier
Schakelt opmaakgerelateerde lintregels uit die anders conflicteren met Prettier.
rules
Aangepaste instellingen voor het project:
'no-console': ['warn']→ staatconsole.warnenconsole.errortoe, maar waarschuwt voor andere console-aanroepen.'@typescript-eslint/no-unused-vars'→ waarschuwt voor variabelen of parameters die wel zijn gedeclareerd maar niet worden gebruikt (negeert namen die beginnen met_).'semi': ['error', 'always']→ dwingt het gebruik van puntkomma's af.
Deze configuratie biedt:
- Betrouwbare linting voor JavaScript + TypeScript
- Ingebouwde best practices voor Next.js
- Automatische compatibiliteit met Prettier
- Eenvoudige, duidelijke regels die je codebase consistent, leesbaar en vrij van bugs maken
Zodra dit bestand aanwezig is, kun je je project linten met:
npm run lint
of automatisch herstelbare problemen oplossen met:
npm run lint -- --fix
ESLint versus andere linters
| Functie | ESLint | TSlint (verouderd) | JSHint | StandardJS |
|---|---|---|---|---|
| Taalondersteuning | JavaScript, TypeScript | TypeScript | JavaScript | JavaScript |
| Configureerbaar | ✅ Ja | ⚠️ Beperkt | ⚠️ Beperkt | ❌ Nee (vaste stijl) |
| Pluginecosysteem | 🟢 Groot | 🔴 Klein | 🔴 Klein | 🔴 Minimaal |
| Automatisch herstel | ✅ Ja | ⚠️ Gedeeltelijk | ⚠️ Gedeeltelijk | ✅ Ja |
| Actief onderhouden | 🟢 Ja | 🔴 Nee | 🟡 Zelden | 🟢 Ja |
Sinds TSlint officieel verouderd is verklaard ten gunste van ESLint, gebruiken tegenwoordig vrijwel alle moderne JavaScript- en TypeScript-projecten ESLint.
Best practices voor het gebruik van ESLint
- Combineer ESLint met Prettier voor automatische codeopmaak.
- Voeg ESLint-controles toe aan je Git-pre-commithooks met Husky of lint-staged.
- Voer het uit in je CI-pijplijn om codekwaliteit af te dwingen in pull requests.
- Je kunt aanbevolen pakketten gebruiken zoals eslint-config-airbnb of eslint-plugin-react
Conclusie
Linters zijn essentieel om codebases schoon, consistent en vrij van fouten te houden, vooral in samenwerkingsprojecten. Daarbij onderscheidt ESLint zich als de meest flexibele en krachtige tool voor JavaScript- en TypeScript-ontwikkelaars.
Of je alleen werkt of in een groot team, door ESLint aan je workflow toe te voegen, blijft je code op de lange termijn professioneel, leesbaar en onderhoudbaar.
Wil je ESLint in actie zien? Bekijk de officiële documentatie of voeg het aan je project toe met npx eslint --init.