Modul 06 · Jak funguje software

Balíčky, závislosti a package.json

Odkud se v projektu bere kód, který jsi nenapsal, a proč je node_modules tak obrovská.

11 minlekce 36/107

Po lekci umíš

  • Rozumíš tomu, co je balíček a závislost
  • Víš, k čemu je package.json a package-lock.json
  • Znáš rizika spojená s přidáváním knihoven
Obsah lekce (6)

Když se podíváš do projektu, většina kódu tam není od tebe ani od Clauda. Je z balíčků.

Co je balíček

Balíček je hotový kus kódu od někoho jiného, který si projekt stáhne, aby nemusel řešit něco od nuly.

Závislost (dependency) znamená, že tvůj projekt na tom balíčku závisí – bez něj nefunguje.

package.json

Seznam toho, co projekt potřebuje, plus příkazy, které se dají spustit.

package.json (zkráceno)
{
  "name": "muj-web",
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start"
  },
  "dependencies": {
    "next": "16.3.2",
    "react": "19.2.8"
  },
  "devDependencies": {
    "typescript": "^5"
  }
}

Tři části, které tě zajímají:

  1. scripts – příkazy, které můžeš spustit

    Když je tady "dev": "next dev", znamená to, že npm run dev spustí next dev. Když nevíš, jak se projekt spouští, podívej se sem.

  2. dependencies – potřebné pro běh

    Balíčky, bez kterých aplikace nefunguje ani u uživatele.

  3. devDependencies – potřebné jen při vývoji

    Nástroje na kontrolu kódu, testování a podobně. K uživateli se nedostanou.

node_modules a package-lock.json

node_modules je složka se staženými balíčky. Bývá obrovská – klidně stovky megabajtů a desetitisíce souborů.

Nikdy do ní nesahej, nikdy ji neposílej na GitHub a nikdy ji nezálohuj. Dá se kdykoliv obnovit z package.json příkazem npm install.

package-lock.json je přesný zápis toho, které verze se skutečně nainstalovaly. Ten na GitHub patří.

Co znamenají ty symboly u verzí

Verze se zapisuje jako tři čísla: 16.3.2 – hlavní, vedlejší, oprava.

ZápisCo znamená
16.3.2Přesně tahle verze
^16.3.2Tahle nebo novější, ale ne verze 17
~16.3.2Tahle nebo novější oprava, ale ne 16.4

Změna prvního čísla znamená, že se něco zásadně změnilo a nemusí to fungovat jako dřív. Proto se ^ používá tak často – povoluje opravy, nepovolí zásadní změnu.

Rizika balíčků

Tady je část, kterou by ti měl někdo říct dřív, než přidáš dvacátý balíček.

  1. Každý balíček je cizí kód, který ti běží v projektu

    Nečteš ho a nikdo za něj neručí. U velkých a známých je riziko malé. U balíčku se sto staženími týdně to malé riziko není.

  2. Balíčky mají vlastní závislosti

    Přidáš jeden a stáhne se jich čtyřicet. To je normální, ale znamená to větší plochu, na které se něco může pokazit.

  3. Neudržované balíčky

    Když se balíček roky neaktualizuje, přestane fungovat s novějšími verzemi ostatních věcí. A když se v něm najde bezpečnostní díra, nikdo ji neopraví.

  4. Zbytečné balíčky

    Přidat celou knihovnu kvůli jedné funkci na formátování data je běžná chyba. Platí za to každý návštěvník tvého webu.

Prompt pro Claude Code

Zeptej se, než přidáš knihovnu

Použij, kdykoliv Claude navrhne nový balíček.

Než tuhle knihovnu přidáš, odpověz mi:

1. Co přesně z ní budeme používat?
2. Dá se to napsat vlastním kódem? Kolik řádků by to bylo?
3. Jak je populární a kdy naposledy vyšla nová verze?
4. Kolik dalších závislostí si s sebou přinese?
5. O kolik naroste výsledná velikost webu?

Pak mi doporuč, jestli ji přidat, nebo ne, a proč.

Kdy o tom Claude bude mluvit

  • „Přidám balíček na práci s daty.“ → Chystá se něco stáhnout. Zeptej se proč.
  • „Spusť npm install.“ → Stahují se balíčky podle package.json.
  • „Konflikt verzí.“ → Dva balíčky chtějí nesouhlasné verze třetího. Nech to vyřešit Clauda.

Co si odnést

  • Balíček je hotový cizí kód, závislost je balíček, bez kterého projekt neběží.
  • package.json je seznam, package-lock.json přesné verze, node_modules stažené soubory.
  • node_modules nepatří na GitHub, package-lock.json ano.
  • Každý nový balíček je rozhodnutí. Ptej se, než ho přidáš.

Máš to za sebou?

Označ lekci jako hotovou, ať víš, kde jsi skončil. Nic se tím neuzamkne.

Obsah aktualizován: 21. srpna 2026