Správa aktualizací závislostí v projektu Node.js

Dokončeno

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ého npm 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é v npm-shrinkwrap.json . Kromě toho npm-shrinkwrap.json je soubor kompatibilní se staršími verzemi npm (verze 2–4), zatímco package-lock.json je kompatibilní s npm verze 5 a novější. Proto se můžete setkat npm-shrinkwrap.json při údržbě starších základů kódu. Většina vývojářů místo package-lock.json npm-shrinkwrap.json. Jednou z výjimek, kde npm-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 a package-lock.json soubory shodují s pravidlem verze, neexistuje žádný konflikt. Pokud package.json například určuje 1.x a package-lock.json určuje verzi 1.4, nainstaluje se verze 1.4.
  • Pokud package.json určuje konkrétnější verzi, například 1.8.x, přepíše package-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 pro aktualizace :

  1. npm run test: Před zahájením tohoto procesu aktualizace ověřte, že vaše stávající testy projdou.
  2. npm audit: Chcete-li zkontrolovat ohrožení zabezpečení v aktuální verzi, kterou používáte. Informace z npm 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.
  3. npm outdated: chcete-li zobrazit seznam všech zastaralých balíčků. Tento příkaz poskytuje informace ve sloupcích Wanted, Latest a Location ..
  4. Aktualizovat pomocí npm update:
    • U menších projektů (několik závislostí v : package.jsonmůžete se pokusit npm update aktualizovat všechny závislosti a pak spustit testy.
    • U větších projektů (s mnoha závislostmi v : package.jsonaktualizujte jeden balíček nebo řadu balíčků (například Next.js a React) a pak testy spusťte.
  5. npm audit: Zkontrolujte, jestli nejsou žádná kritická nebo vysoká ohrožení zabezpečení. Pokud chyby zabezpečení stále existují, použijte npm update název balíčku a hlavní verzi doporučenou v npm auditsouboru .
  6. npm run test Znovu.
  7. Přihlaste se package.json package-lock.jsona .