Slovník pojmů

npm

npm spravuje JavaScriptové závislosti a projektové skripty. Není to Node.js runtime ani totéž co veřejný npm registry; jsou to propojené, ale rozdílné vrstvy.

Stručná definice

Závislosti se deklarují, uzamykají a instalují záměrně.

npm CLI čte soubor package.json, ve kterém projekt popisuje vlastní jméno, skripty a přijatelné verze přímých závislostí. Při instalaci vyřeší také jejich nepřímé závislosti, uloží je do node_modules a obvykle vytvoří nebo upraví package-lock.json. Lockfile zachycuje konkrétní strom, ze kterého lze znovu sestavit stejné prostředí.

Node.js je runtime, který program spouští. npm je správce balíčků a nástroj pro práci s projektem. Veřejný npm registry je služba, kde jsou publikované balíčky dostupné; npm ale může pracovat i s privátním registrem, Git repozitářem, tarballem nebo lokální cestou. Proto nelze npm ztotožnit ani s Node.js, ani se samotným registrem.

Název npm se běžně čte jako en-pí-em. V dokumentaci a konverzaci může označovat CLI, veřejný ekosystém i firmu kolem registry, ale v technickém návrhu je lepší rozlišit, zda mluvíme o příkazu npm, lock souboru, registru nebo konkrétním balíčku. Ve frontendovém projektu npm typicky spouští TypeScript, Playwright i build; u PHP závislostí obdobnou, ale samostatnou roli plní Composer.

K čemu se používá

Od jedné knihovny po opakovatelný build v CI

npm propojuje deklaraci projektu, zdroje balíčků a běžné příkazy týmu. Úspěšná instalace ale sama o sobě nepotvrzuje správné chování aplikace.

  • přidání a aktualizace knihoven pro frontend, Node.js službu nebo vývojové nástroje
  • vytvoření a commitnutí package-lock.json pro opakovatelnou instalaci aplikace
  • spouštění týmových příkazů jako test, lint, build nebo start přes sekci scripts
  • oddělení runtime, vývojových, volitelných a peer závislostí podle jejich role
  • práce s veřejným i privátním registrem a scoped balíčky
  • základní kontrola známých zranitelností přes npm audit jako jedna z vrstev bezpečnosti

Praktický příklad

Projekt deklaruje záměr, lockfile drží přesný výsledek

package.json v ukázce říká, že aplikace potřebuje knihovnu express ve verzi odpovídající uvedenému semver rozsahu a že testy se spouštějí jednotným příkazem. Po řízené změně závislostí se zkontroluje také package-lock.json, protože v něm jsou přesné verze přímých i nepřímých balíčků.

Na CI nebo při nasazení aplikace se obvykle použije npm ci nad commitnutým lockfilem. Příkaz nevyhledává novou sadu verzí ani soubory package.json a package-lock.json nepřepisuje. Jestliže si odporují, skončí chybou, což je užitečnější než tiché vytvoření jiného buildu.

JSON

{
  "name": "shop-tools",
  "private": true,
  "scripts": {
    "test": "node --test",
    "build": "node scripts/build.js"
  },
  "dependencies": {
    "express": "^5.0.0"
  },
  "devDependencies": {
    "eslint": "^9.0.0"
  }
}

Jak funguje

Od deklarace závislostí ke stejnému buildu

package.json a package-lock.json mají jinou roli. Dohromady dávají týmu přehled i opakovatelnost.

  1. package.json Projekt deklaruje přímé závislosti, verze, skripty, metadata a někdy nastavení práce s balíčky.
  2. Řešení stromu npm vybere kompatibilní přímé i nepřímé závislosti podle deklarace, lockfile a nastavení projektu.
  3. package-lock.json Zachytí konkrétní vyřešené balíčky, jejich zdroje a integritní údaje pro následující opakovatelnou instalaci.
  4. node_modules a scripts Lokálně nainstalované balíčky jsou dostupné aplikaci a jejich binární nástroje mohou použít skripty v package.json.
  5. CI a nasazení Čistá instalace z ověřeného lockfilem, testy a build vytvářejí důvěru, že jde o stejnou sadu, která prošla kontrolou.

Důležitá rozlišení

Správa balíčků není běh aplikace ani bezpečnostní prověrka.

Rozlišení vrstev pomáhá vybrat správný bezpečnostní a provozní krok.

Node.js

Runtime pro spuštění JavaScriptu mimo prohlížeč. npm se s ním často instaluje, ale nespouští aplikaci stejnou rolí jako proces node.

Registry

Služba pro publikování a stahování balíčků. npm CLI může používat veřejný registry, privátní registry i jiné zdroje balíčků.

Balíček

Distribuovatelná jednotka popsaná souborem package.json. Balíček může být knihovna, CLI nebo celá aplikace; jeho existence v registru není bezpečnostní prověrka.

Lockfile

Konkrétní vyřešený strom závislostí. Není náhradou deklarace v package.json ani zárukou, že kód balíčku je správný nebo bezpečný.

Bundler a framework

Tyto nástroje npm často instaluje a spouští přes scripts. npm ale neurčuje výsledný frontendový bundle ani architekturu aplikace.

Důležité soubory a příkazy

Instalace, lockfile a scripts nejsou zaměnitelné.

Příkaz je potřeba zvolit podle záměru: změna závislosti je jiná práce než čisté sestavení již schváleného projektu.

package.json

Je deklarace projektu a přijatelných verzí přímých závislostí. Semver rozsah jako ^5.0.0 neříká, že se vždy nainstaluje jedna pevná verze.

package-lock.json

Je konkrétní stav závislostního stromu pro aplikaci. Patří do verzovacího systému a nemá se ručně upravovat. Bez lockfile se může při další instalaci vyřešit jiná sada nepřímých závislostí.

npm install

Použij při přidání nebo řízené změně závislosti. Bez argumentu respektuje lockfile, pokud odpovídá package.json; pokud si odporují, může znovu vyřešit strom a package-lock.json aktualizovat. Není to zmrazená instalace.

npm ci

Použij pro čistou instalaci celé aplikace v CI, testu nebo nasazení. Vyžaduje lockfile, zkontroluje jeho soulad s package.json, odstraní existující node_modules a nebude zapisovat do package.json ani lockfile. Neinstaluje jednotlivý nový balíček. Vznikl-li lockfile s volbami měnícími tvar stromu, musí npm ci použít stejné volby nebo projektovou .npmrc.

scripts a binární nástroje

Sekce scripts sjednocuje příkazy týmu přes npm run. Při instalaci mohou životní cykly balíčků spouštět kód; konfigurace jako ignore-scripts sice může toto chování omezit, ale může také rozbít legitimní sestavení závislosti.

Registry a scopes

Registry je zdroj publikovaných balíčků, ne synonymum pro npm CLI. Scope například @firma/nastroj usnadňuje odlišit interní zdroj a přístupová pravidla, ale nenahrazuje kontrolu balíčku ani správu tokenů.

Výhody a omezení

Rychlý ekosystém za cenu pečlivé správy dodavatelského řetězce.

Přínosy

  • opakovatelný build aplikace díky lockfile
  • sdílené scripts pro vývoj, testy, lint a build
  • velký výběr knihoven a nástrojů pro JavaScriptový ekosystém
  • možnost oddělit veřejné a privátní zdroje balíčků

Rizika a chyby

  • přidání malého balíčku může přinést mnoho nepřímých závislostí i instalační kód
  • npm install a npm ci mají rozdílný účel; jejich záměna skrývá změny nebo rozbije čistý build
  • necommitnutý nebo nekonzistentní lockfile vede k rozdílným prostředím
  • automatické npm audit fix může změnit strom závislostí a není náhradou review
  • globálně instalované nástroje zhoršují opakovatelnost, pokud projekt neurčí jejich verzi

Kdy dává smysl

Pro každý udržovaný projekt s JavaScriptovými závislostmi.

npm je přirozená volba pro frontendové projekty, Node.js služby a nástroje, které potřebují spravovat knihovny, testy či build. U aplikace se package.json, package-lock.json a odpovídající konfigurace obvykle commitují společně, aby vývojář, CI a produkční build vycházely ze stejného rozhodnutí.

Nenainstaluj balíček jen proto, že zkrátí několik řádků kódu. Posuzuj aktivitu údržby, licenci, podporovanou verzi Node.js, rozsah nepřímých závislostí, instalační skripty a skutečnou hodnotu pro projekt. Malá lokální funkce může být čitelnější a bezpečnější bez dalšího balíčku.

Bezpečnost a kvalita

Instalace balíčku je spuštění změny dodavatelského řetězce.

Balíčky, konfigurace a lockfile patří do stejného review jako vlastní zdrojový kód.

  • commitnout package.json, package-lock.json i projektovou konfiguraci, která ovlivňuje tvar stromu závislostí
  • v CI a nasazení používat npm ci nad schváleným lockfilem místo obecné aktualizace
  • před přidáním balíčku prověřit účel, aktivitu údržby, licenci, velikost stromu a zdroj publikace
  • číst změny lockfile a instalačních skriptů stejně pozorně jako změnu vlastního kódu
  • používat npm audit pro přehled známých zranitelností, ale nález vyhodnotit podle dosažitelnosti a opravy testovat
  • nepouštět npm audit fix ani široký update bez review; audit fix používá instalační mechanismus a může změnit závislostní strom
  • chránit registry tokeny, omezit jejich oprávnění a nepředávat je nedůvěryhodným buildům či instalačním skriptům

Časté otázky

npm bez nebezpečných zkratek

Je npm totéž co Node.js?

Ne. Node.js je runtime pro běh JavaScriptu mimo prohlížeč. npm je nástroj pro správu balíčků a scripts. Často se instalují společně, ale řeší rozdílné úkoly.

Je npm totéž co npm registry?

Ne. Registry je služba, ze které se balíčky publikují a stahují. npm CLI je nástroj, který s registry může komunikovat, ale umí pracovat i s jinými registry nebo zdroji.

Jaký je rozdíl mezi npm install a npm ci?

npm install slouží i pro změnu závislostí a může aktualizovat lockfile, když není v souladu s package.json. npm ci provádí čistou, zmrazenou instalaci celého projektu z existujícího lockfile; při nesouladu skončí chybou a soubory nemění.

Má být package-lock.json v Gitu?

U aplikace obvykle ano. Zachycuje konkrétní strom, který má tým, CI i nasazení opakovat. Změna lockfile se kontroluje společně se změnou package.json.

Je npm audit důkaz, že jsou závislosti bezpečné?

Ne. Ukazuje známé zranitelnosti podle informací registru, ale neposoudí každou zranitelnost, škodlivý balíček, konfiguraci ani dosažitelnost problému. Výsledek je podklad pro review, ne bezpečnostní certifikát.

Proč mohou být instalační skripty rizikové?

Během instalace mohou spustit kód v kontextu vývojáře nebo CI. Je třeba znát zdroj balíčku, chránit tokeny a rozumět tomu, které skripty a oprávnění build skutečně potřebuje.

Jak pracuji s vývojovým prostředím

Závislosti beru jako součást bezpečného a opakovatelného nasazení.

U dlouhodobých aplikací propojuji verzování, CI, review a provozní prostředí tak, aby změna balíčku byla dohledatelná a otestovatelná.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.