Správa aktualizací závislostí v projektu Node.js
Jako vývojář ve společnosti Tailwind Traders je důležité udržovat naše balíčky aktuální. To pomáhá zajistit, že používáme nejnovější funkce a opravy. Pomáhá nám také předcházet ohrožením zabezpečení. V této lekci se dozvíte, jak spravovat závislosti v projektu Node.js. Dozvíte se, jak aktualizovat balíčky, používat sémantickou správu verzí a spravovat problémy se zabezpečením.
Důležité informace před aktualizací balíčku
Před aktualizací balíčku zvažte následující:
- Typ aktualizace: Zjistěte, jestli se jedná o menší opravu, novou funkci nebo hlavní změnu, která by mohla poškodit váš kód. Sémantické správa verzí vám může pomoct tuto identifikaci.
- Konfigurace projektu: Ujistěte se, že je projekt nastavený tak, aby přijímal pouze požadované aktualizace, aby nedocházelo k neočekávaným změnám.
- Zabezpečení: Mějte přehled o potenciálních ohroženích zabezpečení. Pomocí funkce auditu npm identifikujte a aktualizujte problematické balíčky.
- Testování: Ujistěte se, že testy po aktualizaci projdou. Pokud testy nemáte, zvažte jejich přidání. Vaše aplikace se může po aktualizaci chovat odlišně a testy ověřují správné chování.
Sémantická správa verzí pro definování chování aktualizace
Sémantická správa verzí je klíčovým standardem při vývoji softwaru. Je nezbytné pro publikování i používání balíčků npm. Pomáhá spravovat rizika aktualizací tím, že indikuje typ změn v nové verzi. Číslo verze obsahuje konkrétní oddíly, které odrážejí tyto změny:
Typ verze | Position | Syntaxe | Co se stane | Přístup k aktualizacím |
---|---|---|---|---|
Hlavní | 1. | x.0.0 nebo * | Změny z verze 1.0.0 na 2.0.0 označují zásadní změny. Je možné, že bude nutné upravit kód. | Pohodlné s okamžitými aktualizacemi nejnovější hlavní verze a potvrzením potenciálních změn kódu. |
Menší | 2. | 1.x.1 nebo ^ | Změny z verze 1.2.9 na 13.0 zavádí nové funkce. Stávající kód by stále měl fungovat. Aktualizace jsou obvykle bezpečné. | Otevřete nové funkce, ale ne zásadní změny. |
Patch | 3. | 1.1.x nebo ~ | Změny z verze 1.0.7 na 1.08 opravy chyb. Aktualizace by měl být bezpečný. | Přijetí oprav chyb |
U malých projektů Node.js můžete volně aktualizovat na nejnovější verze. U větších projektů ale aktualizace vyžadují pečlivé myšlení a nejsou vždy automatické. Obecně platí, že aktualizace menších závislostí s menším počtem vlastních závislostí usnadňuje proces.
Před aktualizací jedné nebo více závislostí byste měli soubor nakonfigurovat package.json
, abyste při spuštění npm update <name of dependency>
příkazu získali předvídatelné chování. Node.js používá sadu symbolů, které umožňují definovat, jak chcete balíčky aktualizovat.
Aktualizace balíčku pomocí npm CLI
Balíček můžete nainstalovat pomocí příkazu install
nebo update
příkazu v npm. Tyto příkazy jsou teď většinou zaměnitelné. K aktualizaci balíčku obvykle používáte:
- Nejnovější verze:
npm update <package name>@latest
. - Konkrétní verze:
npm update <package name>@<optional version number>
.
Proces aktualizace závisí na dvou faktorech:
- Argument verze: Pokud je v
npm update
příkazu zadáno číslo verze, npm načte a nainstaluje tuto konkrétní verzi. - Položka souboru manifestu: Soubor
package.json
obsahuje pravidla pro aktualizaci závislostí. Znamená například,"dependencyName": "1.1.x"
že npm načte verzi, která odpovídá tomuto vzoru.
Principy správy verzí
Správa verzí závislostí řídí tři soubory:
package.json
: Tento soubor definuje verzi balíčku, který chcete použít. Jedná se o soubor manifestu pro váš projekt. Obsahuje metadata pro váš projekt, včetně závislostí.package-lock.json
: Tento soubor popisuje přesný strom, který byl vygenerován, aby následné instalace mohly generovat stejné stromy bez ohledu na aktualizace mezilehlé závislosti. Tento soubor je určený k potvrzení do zdrojových úložišť.shrinkwrap.json
: Tento soubor je vytvořen příkazem rozhraní příkazovéhonpm shrinkwrap
řádku a je podobnýpackage-lock.json
. Hlavní rozdíl mezi příkazy spočívá v tom, že uživatelé nemohou přepsat verze balíčků zadané vnpm-shrinkwrap.json
. Kromě tohonpm-shrinkwrap.json
je soubor kompatibilní se staršími verzemi npm (verze 2–4), zatímcopackage-lock.json
je kompatibilní s npm verze 5 a novější. Proto se můžete setkatnpm-shrinkwrap.json
při údržbě starších základů kódu. Většina vývojářů místopackage-lock.json
npm-shrinkwrap.json
. Jednou z výjimek, kdenpm-shrinkwrap.json
je upřednostňovaná globální instalace démonů a nástrojů příkazového řádku, kde vývojáři chtějí zajistit, aby byly nainstalovány přesné verze zadaných balíčků.
Příklad určení verze balíčku
Představte si scénář, ve kterém ve svém kódu používáte verzi 1.2, a pak vydáte verzi 1.4, která rozdělí váš kód. Pokud v tuto chvíli někdo vaši aplikaci nainstaluje, získá nefunkční aplikaci. Pokud ale existuje package-lock.json
soubor určující verzi 1.2, nainstaluje se tato verze.
Tady je příklad určení verze balíčku, která je nainstalovaná:
- Pokud se
package.json
soubory apackage-lock.json
soubory shodují s pravidlem verze, neexistuje žádný konflikt. Pokudpackage.json
například určuje1.x
apackage-lock.json
určuje verzi 1.4, nainstaluje se verze 1.4. - Pokud
package.json
určuje konkrétnější verzi, například1.8.x
, přepíšepackage-lock.json
soubor, který uvádí starší verzi 1.4. V tomto případě se nainstaluje verze 1.8.0 nebo novější verze opravy, pokud je k dispozici.
Vyhledání a aktualizace zastaralých balíčků pomocí npm zastaralého
Příkaz npm outdated
slouží k identifikaci balíčků, které mají k dispozici novější verze. Při spuštění poskytuje seznam těchto zastaralých balíčků:
Package Current Wanted Latest Location Depended by
lodash 1.0.0 1.0.0 4.17.19 lock-test main-code-file
node-fetch 1.2.0 1.2.0 2.6.0 lock-test function-code-file
Sloupce ve výstupu zahrnují:
Sloupec | Popis |
---|---|
Balíček | Zastaralý balíček. |
Aktuální | Aktuální nainstalovaná verze balíčku. |
Chtěl | Nejnovější verze, která odpovídá sémantickému vzoru, který jste zadali v package.json souboru. |
Nejpozdější | Nejnovější verze balíčku |
Umístění | Umístění závislosti balíčku. Příkaz outdated prochází všechny nainstalované balíčky v různých node_modules složkách. |
Závisí na | Balíček, který má závislost. |
Správa problémů se zabezpečením s auditem npm
Pokaždé, když nainstalujete nebo aktualizujete balíček, získáte odpověď protokolu s informacemi o tom, jaká verze byla nainstalována a jestli existují nějaká ohrožení zabezpečení. Protokol obsahuje seznam ohrožení zabezpečení. Pokud máte nějaká kritická nebo vysoká ohrožení zabezpečení, měli byste balíček aktualizovat.
Příkladem odpovědi protokolu je:
+ lodash@1.3.1
added 1 package from 4 contributors and audited 1 package in 0.949s
found 3 vulnerabilities (1 low, 2 high)
run `npm audit fix` to fix them, or `npm audit` for details
Pokud chcete problém vyřešit a použít aktualizaci, můžete příkaz spustit npm audit
. Tento příkaz vypíše každou chybu zabezpečení.
Příkaz npm audit fix
se pokusí vyřešit ohrožení zabezpečení upgradem na podverzi, kde problém neexistuje. To ale nemusí být k dispozici, pokud je oprava ve skutečnosti v další hlavní verzi.
V takových případech může být nutné použít npm audit fix --force
, což může představovat zásadní změny aktualizací na hlavní verzi. Spuštění tohoto příkazu je rozhodnutí, které byste měli pečlivě provést. Měli byste vědět o zásadních změnách a použít npm update
ho k aktualizaci kódu, včetně ohrožení zabezpečení.
Ohrožení zabezpečení je chyba kódu, kterou můžou útočníci zneužít k provádění škodlivých akcí, potenciálně ohrozit vaše data a systémy. Tato ohrožení zabezpečení je zásadní řešit okamžitě.
Vzhledem k častému zjišťování ohrožení zabezpečení má GitHub funkci, která prohledává úložiště a automaticky vytváří žádosti o přijetí změn, které navrhují upgrady na bezpečnější verze. Pravidelné spouštění npm audit
je dobrým zvykem identifikovat a opravit ohrožení zabezpečení, což přispívá k celkovému zabezpečení projektu.
Doporučený pracovní postup aktualizace
Doporučený pracovní postup pro aktualizace :
npm run test
: Před zahájením tohoto procesu aktualizace ověřte, že vaše stávající testy projdou.npm audit
: Chcete-li zkontrolovat ohrožení zabezpečení v aktuální verzi, kterou používáte. Informace znpm audit
můžou doporučit aktualizaci na hlavní verzi. Pokud jsou uvedeny nějaké změny způsobující chybu, měli byste pečlivě zkontrolovat.npm outdated
: chcete-li zobrazit seznam všech zastaralých balíčků. Tento příkaz poskytuje informace ve sloupcích Wanted, Latest a Location ..- Aktualizovat pomocí
npm update
:- U menších projektů (několik závislostí v :
package.json
můžete se pokusitnpm update
aktualizovat všechny závislosti a pak spustit testy. - U větších projektů (s mnoha závislostmi v :
package.json
aktualizujte jeden balíček nebo řadu balíčků (například Next.js a React) a pak testy spusťte.
- U menších projektů (několik závislostí v :
npm audit
: Zkontrolujte, jestli nejsou žádná kritická nebo vysoká ohrožení zabezpečení. Pokud chyby zabezpečení stále existují, použijtenpm update
název balíčku a hlavní verzi doporučenou vnpm audit
souboru .npm run test
Znovu.- Přihlaste se
package.json
package-lock.json
a .