tl;dr
dependencies
jsou vyžadovány naší aplikací za běhu. Balíčky jako react
, redux
a lodash
jsou všechny příklady závislostí. devDependencies
jsou potřeba pouze k vývoji nebo kompilaci vaší aplikace. Balíčky jako babel
, enzyme
a prettier
jsou příklady devDependencies.
instalace npm
Skutečný rozdíl mezi dependencies
a devDependencies
je vidět při spuštění npm install
.
Pokud spustíte npm install
z adresáře obsahujícího soubor package.json
(což běžně děláte například po klonování projektu).
✅ Budou nainstalovány všechny balíčky umístěné v dependencies
✅ Budou nainstalovány všechny balíčky umístěné v devDependencies
Pokud spustíte npm install <package-name>
(co normálně děláte, když chcete přidat nový balíček do stávajícího projektu) tj. npm install react
.
✅ Budou nainstalovány všechny balíčky umístěné v dependencies
❌ Žádný z balíčků umístěných v devDependencies
nebude nainstalován
Přechodné závislosti
Pokud balíček A závisí na balíčku B a balíček B závisí na C, pak balíček C je tranzitivní závislost na balíčku A. To znamená, že aby balíček A fungoval správně, musí mít nainstalovaný balíček B. Aby však balíček B fungoval správně, je třeba nainstalovat balíček C. Proč to zmiňuji? No, dependencies
a devDependencies
také jinak zacházejí s tranzitivními závislostmi.
Když spustíte npm install
z adresáře obsahujícího soubor package.json
:
dependencies
✅ Stáhněte si všechny tranzitivní závislosti.devDependencies
❌ Nestahujte žádné tranzitivní závislosti.
Určete závislosti vs. devDependencies
Od NPM 5, když spustíte npm install <package-name>
, bude tento balíček automaticky uložen do vašeho dependencies
ve vašem souboru package.json
. Pokud jste chtěli určit, že konkrétní balíček by měl být zahrnut v devDependencies
místo toho bych přidal značku --save-dev
.
npm install prettier --save-dev
Instalace na produkční server
Často budete muset svůj projekt nainstalovat na produkční server. Když to uděláte, nebudete chtít instalovat devDependencies
protože je zjevně nebudete potřebovat na svém produkčním serveru. Chcete-li nainstalovat pouze dependencies
(a ne devDependencies
), můžete použít značku --production
.
npm install --production