A kódminőség biztosítása: ESLint és Prettier beállítása egy frontend projektben

Egy modern frontend projekt fejlesztése során a tiszta, olvasható és hibamentes kódra való törekvés alapvető fontosságú. Nem csupán esztétikai kérdésről van szó; a jó kódminőség jelentősen hozzájárul a projekt hosszú távú fenntarthatóságához, a fejlesztési sebességhez és a csapatmunkához. Ebben a cikkben két elengedhetetlen eszközt mutatunk be, az ESLintet és a Prettiart, amelyek együttesen biztosítják, hogy a kód ne csak működjön, hanem példaértékű legyen. Megvizsgáljuk, hogyan segítenek ezek az eszközök a következetesség megőrzésében, a hibák megelőzésében, és hogyan integrálhatjuk őket zökkenőmentesen a fejlesztési munkafolyamatunkba.

Képzelj el egy projektet, ahol minden fejlesztő más kódolási stílust használ: van, aki tabulátorokat, van, aki szóközöket; valaki elhagyja a pontosvesszőt, más ragaszkodik hozzá. Ez a káosz nemcsak vizuálisan zavaró, de súlyosabb problémákhoz is vezethet, mint például a nehezen olvasható, karbantarthatatlan kód, vagy a kódfelülvizsgálat során felmerülő végtelen viták a stílusról a funkcionalitás helyett. Az ESLint és a Prettier pont ezt a problémát oldja meg, de egészen más megközelítésből. Míg az ESLint a potenciális hibákra és a stílusszabályok megsértésére figyelmeztet, addig a Prettier automatikusan formázza a kódot, így garantálva a tökéletes vizuális harmóniát.

ESLint: A Statikus Kódelemzés Felülmúlhatatlan Professzora

Az ESLint egy nyílt forráskódú, pluginezhető statikus kódelemző eszköz (linter) JavaScript és TypeScript projektekhez. Fő célja, hogy azonosítsa a problémás mintákat a kódban, és kikényszerítse a stílusszabályokat, mielőtt azok hibákhoz vezetnének. Gondoljunk rá úgy, mint egy szigorú tanárra, aki nem csak a nyelvtani hibákat javítja ki, hanem figyelmeztet a rossz mondatszerkezetekre vagy a nem hatékony kifejezésekre is.

Miért elengedhetetlen az ESLint?

  • Hibafelismerés: Az ESLint képes felismerni olyan gyakori programozási hibákat, mint a nem deklarált változók, a nem használt importok, vagy a potenciálisan null értéket visszaadó kifejezések. Ezáltal már a fejlesztés korai szakaszában kiszűrhetők a hibák, csökkentve a debuggolásra fordított időt.
  • Stíluskövetkezetesség: Lehetővé teszi a csapat számára, hogy egységes kódolási stílusban dolgozzon, legyen szó identálásról, idézőjelek használatáról vagy a változók elnevezéséről. Ez kulcsfontosságú a kód olvashatóságának és karbantarthatóságának szempontjából.
  • Kódminőség javítása: Segít a „rossz gyakorlatok” (antipatterns) elkerülésében, és ösztönzi a tisztább, hatékonyabb kód írását.

Az ESLint telepítése és konfigurálása

Az ESLint telepítése rendkívül egyszerű. Egy új vagy meglévő projektben a következő paranccsal adhatjuk hozzá:

npm install eslint --save-dev

Ezután inicializálnunk kell az ESLint konfigurációját a projektben:

npx eslint --init

Ez a parancs végigvezet egy interaktív kérdéssoron, amelynek során kiválaszthatjuk a projektünk típusát (pl. React, Vue), a használt TypeScriptet, és hogy milyen stílus útmutatót szeretnénk alkalmazni (pl. Airbnb, Standard, Google). Ennek eredményeként létrejön egy .eslintrc.json (vagy .js, .yml) fájl a projekt gyökérmappájában, amely tartalmazza a konfigurációt.

A .eslintrc.json fájl kulcsfontosságú részei:

  • "env": Megadja a globális környezeteket, amelyekben a kód fut (pl. browser: true, node: true, es2021: true).
  • "extends": Itt adhatunk hozzá előre definiált konfigurációkat, mint például "eslint:recommended", vagy népszerű stílus útmutatókat (pl. "airbnb", "plugin:react/recommended").
  • "parserOptions": Meghatározza az ESLint számára, hogy milyen JavaScript verziót és további funkciókat (pl. JSX) támogat a kódunk.
  • "plugins": Lehetővé teszi külső modulok használatát, amelyek további szabályokat vagy funkcionalitást biztosítanak (pl. "react", "jsx-a11y").
  • "rules": Itt felülírhatjuk vagy finomhangolhatjuk az alapértelmezett szabályokat. Minden szabályhoz megadhatunk egy szintet: "off" (kikapcsolva), "warn" (figyelmeztetés), vagy "error" (hiba, amely megakadályozza a buildelést). Például: "indent": ["error", 2] kikényszeríti a 2 szóközös behúzást.
  • "settings": Specifikus beállításokat adhatunk meg pluginek számára, például a React verzióját.

Futtathatjuk az ESLintet a parancssorból egy fájlon vagy mappán:

npx eslint . # A teljes projekt ellenőrzése

A legtöbb modern szerkesztő (pl. VS Code) rendelkezik ESLint bővítménnyel, amely valós időben jelzi a problémákat, és gyakran automatikus javítást is kínál.

Prettier: A Kód Formázás Megkérdőjelezhetetlen Mestere

Míg az ESLint a kódminőségi és stílusszabályok betartatására koncentrál, a Prettier egy „véleményes” kódformázó, amelynek egyetlen célja van: konzisztens, olvasható formába hozni a kódot, és ehhez mindössze egyetlen beállítást kínál: futtatni kell. A Prettier megszünteti a fejlesztők közötti végtelen vitákat a kódolási stílusról azáltal, hogy egy előre definiált, véleményes stílus szerint formázza a kódot. Ez azt jelenti, hogy miután beállítottuk, többé nem kell gondolkodnunk azon, hogy hol tegyünk sortörést, milyen hosszú legyen egy sor, vagy hogy használjunk-e záró pontosvesszőt.

Miért Prettier?

  • Konzisztencia, kérdés nélkül: Mindenki által generált kód pontosan ugyanúgy fog kinézni. Ez drámaian javítja az olvashatóságot és megkönnyíti a kódfelülvizsgálatot.
  • Időmegtakarítás: Nincs több vita a stílusról, nincs több manuális formázás. A Prettier automatikusan elvégzi a „piszkos” munkát.
  • Fókusz a logikára: A fejlesztők a probléma megoldására és a kód funkcionalitására koncentrálhatnak, nem pedig a vizuális megjelenésére.

A Prettier telepítése és konfigurálása

A Prettier telepítése hasonlóan egyszerű:

npm install prettier --save-dev

A Prettier alapértelmezett beállításai elég jók a legtöbb projekthez, de ha szeretnénk finomhangolni, létrehozhatunk egy .prettierrc.json (vagy .js, .yml) fájlt a projekt gyökérmappájában. Néhány gyakran használt beállítás:

  • "printWidth": A maximális sorhossz (pl. 80 vagy 120).
  • "tabWidth": A behúzások szélessége (pl. 2 vagy 4).
  • "semi": Hozzáad-e pontosvesszőt az utasítások végére (true/false).
  • "singleQuote": Egyszeres idézőjelek használata kettős helyett (true/false).
  • "trailingComma": Trailing vesszők használata (pl. "all", "es5", "none").
  • "arrowParens": Arrow függvények paraméterei körüli zárójelek (pl. "always", "avoid").

Példa .prettierrc.json:

{
  "printWidth": 100,
  "tabWidth": 2,
  "useTabs": false,
  "semi": true,
  "singleQuote": true,
  "trailingComma": "es5",
  "bracketSpacing": true,
  "jsxBracketSameLine": false,
  "arrowParens": "always"
}

A Prettier futtatása a parancssorból:

npx prettier --write . # Az összes fájl formázása
npx prettier --check . # Az összes fájl ellenőrzése formázási hibákra

Mint az ESLintnél, itt is erősen ajánlott a szerkesztőintegráció (pl. VS Code Prettier bővítmény), ami lehetővé teszi a fájl mentésekor történő automatikus formázást ("editor.formatOnSave": true).

Az Együttműködés Ereje: ESLint és Prettier Harmonizálása

A probléma az, hogy az ESLint és a Prettier céljai részben átfedésben vannak. Az ESLintnek vannak saját formázási szabályai, amelyek ütközhetnek a Prettier „véleményével”. Ha mindkettőt bekapcsoljuk a projektben, könnyen előfordulhat, hogy az ESLint hibát jelez egy olyan formázás miatt, amit a Prettier éppen jóváhagyott, vagy fordítva. A megoldás az, hogy az ESLintet arra utasítjuk, hogy hagyja figyelmen kívül a formázási szabályokat, és engedje át ezt a feladatot a Prettiernek. Ez a harmonizáció a kulcs a zökkenőmentes munkafolyamathoz.

A megoldás: eslint-config-prettier és eslint-plugin-prettier

Két kiegészítő csomag segítségével érhetjük el ezt az együttműködést:

  • eslint-config-prettier: Ez a konfiguráció kikapcsolja azokat az ESLint szabályokat, amelyek konfliktusba kerülhetnek a Prettierrel. Más szóval, azt mondja az ESLintnek: „Ne foglalkozz a formázással, azt majd a Prettier intézi.”
  • eslint-plugin-prettier: Ez a plugin futtatja a Prettiart ESLint szabályként. Ez azt jelenti, hogy ha a Prettier eltérést talál a kód formázásában, az ESLint hibaként jelenti, és akár automatikusan javítani is tudja (ha az --fix opcióval futtatjuk). Így a formázási hibák is megjelennek az ESLint jelentésben és a szerkesztőnkben.

Beállítás lépésről lépésre:

  1. Telepítsük a szükséges csomagokat:
    npm install eslint-config-prettier eslint-plugin-prettier --save-dev
  2. Módosítsuk a .eslintrc.json fájlt:

    Adjuk hozzá a "prettier"-t a "plugins" tömbhöz, és a "prettier"-t és "plugin:prettier/recommended"-t a "extends" tömbhöz. Fontos, hogy a "plugin:prettier/recommended" legyen az "extends" tömb utolsó eleme, hogy az felülírja az összes korábbi formázási szabályt.

    {
      "env": {
        "browser": true,
        "es2021": true,
        "node": true
      },
      "extends": [
        "eslint:recommended",
        "plugin:react/recommended",
        "plugin:@typescript-eslint/recommended",
        "prettier", // Ez kapcsolja ki az ESLint formázási szabályait
        "plugin:prettier/recommended" // Ez futtatja a Prettiart ESLint szabályként
      ],
      "parser": "@typescript-eslint/parser",
      "parserOptions": {
        "ecmaFeatures": {
          "jsx": true
        },
        "ecmaVersion": 12,
        "sourceType": "module"
      },
      "plugins": [
        "react",
        "@typescript-eslint",
        "prettier" // Ezt is hozzá kell adni
      ],
      "rules": {
        "prettier/prettier": "error", // A Prettier által talált hibák mint ESLint hibák jelennek meg
        "react/react-in-jsx-scope": "off",
        "indent": ["error", 2] // Példa egy egyedi szabályra
      },
      "settings": {
        "react": {
          "version": "detect"
        }
      }
    }

    A "prettier/prettier": "error" szabály biztosítja, hogy minden, a Prettier által felfedezett formázási hiba ESLint hibaként jelenjen meg. Ezzel a beállítással az ESLint lesz az egyetlen forrása az összes kódminőségi és formázási hibajelzésnek.

Integráció a Fejlesztési Munkafolyamatba

A beállítások önmagukban nem elegendőek; integrálni kell őket a mindennapi fejlesztési munkafolyamatba, hogy a csapat automatikusan használja őket.

1. Szerkesztőintegráció

A legkényelmesebb és leghatékonyabb módja a valós idejű visszajelzés. A legtöbb modern kódszerkesztő, mint például a VS Code, bővítményeket kínál az ESLint és a Prettier számára.

  • VS Code:
    • Telepítsük az ESLint bővítményt (dirk.j.bosch).
    • Telepítsük a Prettier - Code formatter bővítményt (esbenp).
    • A beállításokban (settings.json) győződjünk meg róla, hogy a „Format on Save” be van kapcsolva, és hogy a Prettier az alapértelmezett formázó:
      {
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "esbenp.prettier-vscode",
        "eslint.validate": [
          "javascript",
          "javascriptreact",
          "typescript",
          "typescriptreact"
        ]
      }

Ezzel a konfigurációval minden fájl mentésekor a Prettier automatikusan formázza a kódot, majd az ESLint ellenőrzi a minőségi szabályokat és a Prettier által esetlegesen elfelejtett formázást. Így mindig tiszta és hibamentes kódot kapunk.

2. Pre-commit Hook-ok (Husky és lint-staged)

Annak ellenére, hogy a szerkesztőintegráció rendkívül hasznos, a kódminőség utolsó védvonala a verziókezelő rendszer (pl. Git) elköteleződési (commit) fázisában van. A pre-commit hook-ok biztosítják, hogy senki ne tudjon olyan kódot elkötelezni (commit-olni), amely nem felel meg a minőségi és formázási szabványoknak.

Ehhez a husky és a lint-staged csomagokat fogjuk használni:

  • Husky: Lehetővé teszi Git hook-ok egyszerű kezelését és konfigurálását.
  • lint-staged: Futtat scripteket a Git staged fájljain. Ez azt jelenti, hogy csak azokat a fájlokat ellenőrzi és formázza, amelyeket éppen elkötelezni készülünk, ami sokkal gyorsabb, mint az egész projekt futtatása.

Beállítás:

  1. Telepítsük a csomagokat:
    npm install husky lint-staged --save-dev
  2. Inicializáljuk a Husky-t:
    npx husky install
  3. Adjunk hozzá egy pre-commit hook-ot:
    npx husky add .husky/pre-commit "npx lint-staged"
  4. Konfiguráljuk a lint-staged-et a package.json fájlban:

    Adjuk hozzá a következő részt a package.json-hoz (a "scripts" mellé):

    {
      "name": "my-frontend-project",
      "version": "1.0.0",
      // ... egyéb beállítások ...
      "scripts": {
        "lint": "eslint . --ext .js,.jsx,.ts,.tsx",
        "lint:fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix",
        "format": "prettier --write "**/*.{js,jsx,ts,tsx,json,css,scss,md}"",
        "format:check": "prettier --check "**/*.{js,jsx,ts,tsx,json,css,scss,md}""
      },
      "lint-staged": {
        "*.{js,jsx,ts,tsx}": [
          "eslint --fix",
          "prettier --write"
        ],
        "*.{json,css,scss,md}": [
          "prettier --write"
        ]
      }
    }

    Ez a konfiguráció azt mondja, hogy minden Git staged JavaScript/TypeScript fájlon futtassa le az ESLintet automatikus javítással (--fix), majd a Prettiart írási módban (--write). Egyéb fájltípusokon, mint a JSON, CSS, Markdown, csak a Prettiert futtatja. Ezzel biztosítjuk, hogy csak a megfelelően formázott és linterezett kód kerüljön be az elkötelezésekbe.

Gyakori Hibák és Tippek

  • Túl sok szabály: Ne essünk abba a hibába, hogy minden lehetséges ESLint szabályt bekapcsolunk. Csak azokat használjuk, amelyek valóban növelik a kódminőséget vagy a konzisztenciát a csapat számára. A kevesebb néha több.
  • Ignorálási fájlok: Mind az ESLintnek (.eslintignore), mind a Prettiernek (.prettierignore) vannak ignorálási fájljai. Használjuk őket a generált kódok, build outputok vagy külső könyvtárak kizárására, hogy ne fussanak feleslegesen.
  • Teljesítmény: Nagy projektek esetén az ESLint és Prettier futtatása lassú lehet. A lint-staged használata jelentősen csökkenti a futási időt, mivel csak a változott fájlokat dolgozza fel.
  • Csapatmunka: A legfontosabb, hogy a teljes fejlesztői csapat egyetértsen a használt szabályokban, és mindenki alkalmazza azokat. Ezért érdemes már a projekt elején beállítani és megbeszélni a konfigurációt.
  • Automatikus javítás: Az ESLint és Prettier gyakran képes automatikusan javítani a talált problémákat (--fix az ESLintnél, --write a Prettiernél). Használjuk ki ezt a funkciót a munkafolyamat felgyorsítására.

Konklúzió

Az ESLint és a Prettier nem csupán „jó, ha van” eszközök, hanem alapvető pillérei a modern frontend fejlesztésnek. Ezek az eszközök, ha megfelelően vannak konfigurálva és integrálva, jelentősen növelik a kódminőséget, csökkentik a hibák számát, javítják a kód olvashatóságát és elősegítik a zökkenőmentes csapatmunkát. Bár a kezdeti beállítás némi erőfeszítést igényelhet, a hosszú távú előnyök – mint a gyorsabb fejlesztés, a kevesebb debuggolás és az elégedettebb fejlesztők – bőségesen megtérítik a befektetett időt. Fektessünk be a kódminőségbe, és projektjeink sokkal robusztusabbak és fenntarthatóbbak lesznek!

Leave a Reply

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük