Facebook, Google a další představili Yarn — alternativní npm klient řešící problémy s rychlostí, determinismem a offline instalací. Proč přejít na Yarn.
Problémy npm v enterprise¶
npm je default package manager pro Node.js, ale v enterprise prostředí naráží na problémy:
- Nedeterminismus** —
npm installmůže vytvořit různé dependency stromy na různých strojích - Rychlost** — instalace velkých projektů trvá minuty
- Bezpečnost** — žádná verifikace integrity balíčků
- Offline** — instalace vyžaduje síťové připojení
Yarn řeší všechny tyto problémy.
Lockfile a determinismus¶
Yarn zavádí yarn.lock — automaticky generovaný soubor zajišťující identické dependency stromy:
# yarn.lock
lodash@^4.17.0:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz"
integrity sha1-eCA6TRwyiuHYbcpkYONQ0d9P1cg=
Každá závislost má přesnou verzi, URL a integrity hash. yarn install na CI serveru vyprodukuje identický výsledek jako na vývojářském stroji.
npm v té době nemá lockfile — npm shrinkwrap existuje, ale nikdo ho nepoužívá.
Výkon a caching¶
Yarn je dramaticky rychlejší než npm:
- Paralelní stahování** — balíčky se stahují současně, ne sekvenčně
- Globální cache** — jednou stažený balíček se nemusí stahovat znovu
- Offline instalace** — z cache funguje bez internetu
Benchmarky ukazují 2-7x zrychlení oproti npm 3.x. Pro CI/CD pipeline, kde se npm install spouští při každém buildu, je to zásadní úspora.
Migrace z npm¶
Přechod na Yarn je triviální:
yarnmístonpm installyarn add packagemístonpm install --save packageyarn remove packagemístonpm uninstall package- Commitněte
yarn.lockdo gitu (a smažtenpm-shrinkwrap.json)
Yarn je kompatibilní s npm registry — používá stejné balíčky, jen jiný klient. Yarn a npm mohou koexistovat, ale v jednom projektu zvolte jeden.
Závěr: konkurence npm prospívá¶
Yarn donutil npm zlepšit se — npm 5 přinese vlastní lockfile a vylepšený výkon. Zdravá konkurence prospívá celému ekosystému. Pro současné projekty doporučujeme Yarn jako primární package manager.