v moderním vývoji aplikací nepíšeme vše od nuly. Místo toho dáváme přednost použití existujících balíčků s otevřeným zdrojovým kódem. Každý z těchto balíčků má své vlastní správce a komunitu. Použití balíčku v našich projektech nám tedy přináší některé výhody, jako je rychlejší vývoj, přístup k novým pravidelným aktualizacím a lepší zabezpečení než skript vytvořený na míru.
je běžné, že jeden balíček závisí na mnoha dalších balíčcích, aby fungoval správně. Podobně lodash může záviset i na dalších balíčcích, ale samotný lodash závisí také na několika balíčcích. Jinými slovy, vnořené závislosti mohou být někdy tak složité, že nejsou schopny zvládnout správu závislostí ručně.
zde je, když je správce balíčků velmi užitečný. Správci balíčků jsou nástroje, které automaticky zpracovávají závislosti projektu.
například správce balíčků může instalovat nové — nebo aktualizovat stávající-balíčky jediným příkazem. Protože všechno je automatizované, takže není šance na lidskou chybu. Jako vývojáři JavaScriptu máme přístup k několika správcům balíčků. Ale v této příručce, budeme porovnávat tři nejoblíbenější z nich:
- npm
- Příze
- pnpm
Přehled správců balíčků
npm byl první správce balíčků zavést pojmy registru protokolem a standardy balení. To bylo propuštěno zpět v roce 2010 a oficiálně přijato uzlem.krátce nato tým js, což byl zlom pro npm.
po masivním úspěchu uzlu.js, npm také obdržel trakci od komunity vývojáře. Nabízí online registr pro balíčky JavaScript, stejně jako nástroj příkazového řádku, který pracuje s registrem pro instalaci a aktualizaci závislostí.
ale existuje několik nevýhod npm, které vyvolaly vývoj příze a pnpm. Například npm je výrazně pomalejší než jeho protějšky. Má také historii závažných bezpečnostních chyb.
takže velké technologické společnosti jako Facebook a Google váhaly, zda nadále používat npm. Na oplátku, spojili úsilí o vývoj lepší verze npm a nazvali ji příze. Mezitím ukrajinský vývojář Zoltan Kochan vyvinul pnpm.
funkce npm, příze a pnpm
všechny tyto správce balíčků jsou open-source, což znamená, že máte plný přístup ke kontrole vnitřního fungování každého z nich. Někdy je to dokonce požadavek při vývoji aplikací na podnikové úrovni.
výhody npm:
- automaticky generuje soubor
package-lock.json
. Je užitečné zavázat se k systému pro správu verzí. Tímto způsobem, ostatní vývojáři mohou snadno nainstalovat závislosti na jejich místní stroje - Spravovat místní nebo globální závislosti s lehkostí
- npm je dobře vybavena k manipulaci s více verzí závislosti
- má úředního registru, který má více balíčků, než pypi, rubygems, nebo packagist
Výhody Příze:
- Příze řeší mnoho problémů, které se objevují v Monorepo. Například, pokud udržujete více balíčků podle stejného úložiště a všechny mají samostatné
package.json
soubor, můžete aktualizovat všechny balíčky snadno Příze, díky své koncepci prostorů, které můžete nainstalovat závislosti všech balíčků v repozitáři, vše v jednom jít. S npm, budete muset spustit příkaznpm install
ručně v každé složce balíčku. - příze využívá mechanismus offline mezipaměti, což znamená, že při první instalaci balíčku jej příze přidá do složky mezipaměti pod
~/.yarn-cache
. Takže až budete příště potřebovat tento balíček, příze jej načte z místní mezipaměti namísto požadavku HTTP na server. Toto malé vylepšení výrazně zvyšuje výkon Příze ve srovnání s npm - Příze také využívá lock soubor s názvem
yarn.lock
, tak, aby vaše projekty budou pracovat správně pro všechny spoluhráče. Tento koncept je také označován jako deterministický nainstalovat algoritmus - je To zabalené s vestavěným-in license checker, které mohou být užitečné v různých situacích, když vyvíjíte aplikace
- na Rozdíl od npm, Příze používá přístup tzv. paralelní stahování. Umožňuje příze využít více zdrojů k urychlení procesu sestavení
- může automaticky opakovat požadavek HTTP v případě selhání. Tato funkce je zvláště užitečná, když se potýkáte s dočasnými problémy s internetem
výhody pnpm:
- je kompatibilní s npm, ale také nabízí výrazně lepší využití místa na disku a rychlosti
- pnpm nainstaluje všechny balíčky na jednom místě, a pak se používá symbolické odkazy na jejich reference. Zavádí zcela nový koncept nazvaný obsahově adresovatelný úložný systém, který umožňuje pnpm detekovat rozdíl mezi soubory. Na druhé straně duplikuje nezměněné soubory ve dvou různých verzích balíčku
- jeho nejnovější verze 5.8.0, zavádí nové Příze-bash-jako je nastavení tzv. shell-emulator, cross-platform shell prostředí
- pnpm má přísný kontrolní mechanismus přístupu, což znamená, že balíček lze přistupovat pouze závislostí, které jsou definovány v
package.json
soubor
Balíček správce srovnání
Snadné použití
npm, Příze, a pnpm nabízejí téměř shodné příkazy pro jejich různé operace, a všechny jsou snadné na použití. Zde je příklad jejich běžně používaných příkazů:
npm | Příze | pnpm |
---|---|---|
npm install | příze nainstalovat | pnpm nainstalovat |
npm update | příze upgrade | pnpm update |
Rychlost
Není zápas, aby pnpm když přijde na rychlost a výkon těchto manažerů balíček. Podle benchmarku různých případů použití, pnpm ukázala rychlost výkonu až 3x rychleji než npm.
rychlosti příze a npm jsou srovnatelné. V některých případech má příze významnou výhodu oproti npm, ale existují scénáře, kdy je npm vhodnější volbou. Například, pokud budeme provádět instalaci provozu jen pomocí node_modules
přeskočit cache
lock file
funkčnost, pak npm mohl nabídnout 5x vyšší rychlost. Podobně, pokud použijeme všechny tři funkce, pak příze může zvýšit jeho výkon a stane se 11x rychlejší než npm.
bezpečnost
hlavní výhodou příze oproti npm je, že ověřuje integritu každého balíku pomocí kontrolních součtů. Proces ověření se provádí před provedením jakéhokoli kódu z balíčku, takže zahodí jakékoli šance na zranitelnost únosu balíčku.
na druhou stranu, npm je trochu shovívavější, pokud jde o práci se špatnými balíčky. Stále se vyvíjí, aby nabídl nejlepší postupy pro bezpečnost. Ale npm má obecně špatnou pověst z hlediska bezpečnosti.
v minulosti existovaly některé bezpečnostní chyby v npm, které přímo ovlivnily mnoho projektů. Například, v npm verze 5.7.0, při spuštění sudo npm
příkaz na Linux-založený operační systém (OS), tam byla možnost změnit vlastnictví systému souborů, vykreslování OS nepoužitelný.
podobně se v roce 2018 stal další incident krádeže Bitcoinů. V podstatě populární uzel.js package EventStream přidal škodlivou závislost flatmap-stream
ve své verzi 3.3.6. Tento škodlivý balíček byl nabitý šifrovaným užitečným zatížením, které se pokouší ukrást bitcoiny z vývojářského stroje.
pnpm kombinuje pozitivní atributy npm i příze a poskytuje tak ještě lepší zabezpečení. Implementuje také přísný mechanismus řízení přístupu, který váže balíček pouze k použití vlastních závislostí, které jsou definovány v souboru package.json
.
stabilita
npm, příze a pnpm prošly v posledních několika letech několika fázemi. Přesčas, jejich kódová základna dozrála, protože obdrželi spoustu příspěvků od open-source komunity.
a s postupem času se objevují nové koncepty a myšlenky, které by mohly přinést zlomové změny. V době psaní této příručky jsou všichni tito správci balíčků v dobré kondici a můžete je bez problémů používat ve svých projektech.
příze je podporována Facebook a Google, npm je podporována Microsoft a Node.js, a pnpm je většinou vyvinut individuální, i když to teď má 75+ přispěvatelů, takže se můžete spolehnout na tyto balíčku manažeři vytvořit svůj další projekt.
Podpora pro monorepos
Monorepos jsou většinou upřednostňují velké tech společností, ukládat a spravovat své masivní codebases. npm byl navržen pouze pro správu jednotlivých projektů. Od této chvíle nemá žádné funkce pro podporu monorepos. Ale příze i pnpm mají úplnou podporu pro monorepos, díky jejich konceptu pracovních prostorů.
Deterministické — zámek souboru
Všechny tři balení manažeři jsou baleny s funkcí lock soubor. Umožňuje různým vývojářům nainstalovat přesně stejnou kopii projektu. npm používá package-lock.json
soubor, Příze používá yarn.lock
, a pnpm používá pnpm-lock.yaml
.
Závěr
Pokud hledáte řešení, které vám dává lepší rychlost a efektivní využití paměti, měli byste rozhodně zvážit použití pnpm.
pokud manipulujete s monorepomi, můžete k tomu použít pnpm nebo příze. Mějte však na paměti, že Yarn odesílá data o využití na Facebook, což nemusí v některých scénářích učinit příze vhodnou volbou.
příze také nepodporuje verzi 5 uzlu.js. V tomto ohledu je npm preferovanou volbou pro uzel.projekty založené na js, protože je doporučeno uzlem.tým js. V těchto dnech, uzel.js je standardně dodáván s npm.
S npm byste měli zvážit jeho historii s bezpečnostními problémy, které vyvolaly vývoj příze, která byla také vytvořena k řešení mnoha emitentů, kteří byli přítomni v npm. Takže, pokud máte obavy o bezpečnost vašich projektů, zvažte použití příze místo npm.
LogRocket: Debug JavaScript chyby jednodušší pochopení kontextu
ladění kódu je vždy zdlouhavý úkol. Ale čím více chápete své chyby, tím snazší je opravit.
LogRocket umožňuje pochopit tyto chyby novými a jedinečnými způsoby. Naše frontend monitorovací řešení, sleduje interakci uživatelů s vaší JavaScript frontendy, aby vám schopnost najít přesně to, co uživatel udělal to vedlo k chybě.
LogRocket záznamy protokolů konzole, časy načítání stránky, stacktraces, pomalé síťové požadavky/odpovědi se záhlaví + subjekty, prohlížeč metadat, a vlastní protokoly. Pochopení dopadu vašeho kódu JavaScript nebude nikdy snazší!
zkuste to zdarma.