Függőségek frissítéseinek kezelése a Node.js-projektben

Befejeződött

A Tailwind Traders fejlesztőjeként fontos, hogy csomagjaink naprakészek maradjanak. Ez segít biztosítani, hogy a legújabb funkciókat és javításokat használjuk. Emellett segít elkerülni a biztonsági réseket. Ebben a leckében megtudhatja, hogyan kezelheti a node.js-projektek függőségeit. Megtudhatja, hogyan frissítheti a csomagokat, hogyan használhat szemantikai verziószámozást, és hogyan kezelheti a biztonsági problémákat.

A csomag frissítése előtt megfontolandó szempontok

Csomag frissítése előtt fontolja meg a következő szempontokat:

  • Frissítés típusa: Ismerje meg, hogy ez egy kisebb javítás, egy új funkció vagy egy jelentős módosítás, amely megszakíthatja a kódot. A szemantikus verziószámozás segíthet ennek azonosításában.
  • Projektkonfiguráció: Győződjön meg arról, hogy a projekt úgy van beállítva, hogy csak a kívánt frissítéseket kapja meg a váratlan módosítások elkerülése érdekében.
  • Biztonság: Tartsa szem előtt a lehetséges biztonsági réseket. Használja az npm naplózási funkcióját a problémás csomagok azonosítására és frissítésére.
  • Tesztelés: Győződjön meg arról, hogy a tesztek a frissítés után is sikeresek lesznek. Ha nem rendelkezik tesztekkel, vegye fel őket. Az alkalmazás a frissítés után eltérően viselkedhet, és a tesztek ellenőrzik a helyes viselkedést.

Szemantikai verziószámozás a frissítési viselkedés definiálásához

A szemantikus verziószámozás kulcsfontosságú szabvány a szoftverfejlesztésben. Ez elengedhetetlen mind a közzétételhez, mind az npm-csomagok használatához. Segít kezelni a frissítési kockázatokat az új verzió módosításainak típusának jelzésével. A verziószámnak vannak bizonyos szakaszai, amelyek az alábbi változásokat tükrözik:

Verziótípus Position Syntax Mi történik? Frissítési módszer
Nagy 1. x.0.0 vagy * Az 1.0.0-ról 2.0.0-ra módosult módosítások kompatibilitástörő változásokat jeleznek. Szükség lehet kódmódosításra. Kényelmesen frissítheti a legújabb főverziót, elismerve a kód esetleges változásait.
Kisebb 2nd 1.x.1 vagy ^ 1.2.9-ről 1-re módosul.A 3.0 új funkciókat vezet be. A meglévő kódnak továbbra is működnie kell. Frissítések általában biztonságosak. Nyissa meg az új funkciókat, de ne törje meg a módosításokat.
Patch 3rd 1.1.x vagy ~ 1.0.7-ről 1.0-ra módosul.8 átlagos hibajavítás. Frissítések biztonságban kell lennie. Hibajavítások elfogadása.

Kis Node.js-projektek esetén szabadon frissíthet a legújabb verziókra. A nagyobb projektek esetében azonban a frissítések gondos gondolkodást igényelnek, és nem mindig automatikusak. A kisebb függőségek frissítése általában kevesebb saját függőséggel megkönnyíti a folyamatot.

Egy vagy több függőség frissítése előtt konfigurálja a package.json fájlt, hogy kiszámítható viselkedést kapjon a npm update <name of dependency> parancs futtatásakor. A Node.js szimbólumkészletet használ, amely lehetővé teszi a csomagok frissítésének meghatározását.

Csomag frissítése npm parancssori felülettel

A csomagot az install npm-ben található paranccsal telepítheti update . Ezek a parancsok jelenleg többnyire felcserélhetők. Egy csomag frissítéséhez általában a következőt kell használnia:

  • Legújabb verzió: npm update <package name>@latest.
  • Adott verzió: npm update <package name>@<optional version number>.

A frissítési folyamat két tényezőtől függ:

  • Verzióargumentum: Ha a parancsban egy verziószám van megadva, az npm update npm lekéri és telepíti az adott verziót.
  • Jegyzékfájl-bejegyzés: A package.json fájl a függőségek frissítésére vonatkozó szabályokat tartalmaz. Ez azt jelenti például, "dependencyName": "1.1.x" hogy az npm lekéri az ennek a mintának megfelelő verziót.

A verziószámozás ismertetése

A függőségek verziószámozását három fájl szabályozza:

  • package.json: Ez a fájl határozza meg a használni kívánt csomag verzióját. Ez a projekt jegyzékfájlja. Tartalmazza a projekt metaadatait, beleértve a függőségeket is.
  • package-lock.json: Ez a fájl pontosan leírja a létrehozott fát, így a későbbi telepítések a köztes függőségi frissítésektől függetlenül képesek azonos fákat létrehozni. Ez a fájl a forrástárakba való véglegesítésre szolgál.
  • shrinkwrap.json: Ezt a fájlt a parancssori npm shrinkwrap felület parancsa hozza létre, és hasonló a következőhöz package-lock.json: . A parancsok közötti fő különbség az, hogy a megadott npm-shrinkwrap.json csomagverziókat a felhasználók nem bírálhatják felül. Emellett a npm-shrinkwrap.json fájl kompatibilis az npm régebbi verzióival (2-4-es verzió), míg package-lock.json az npm 5-ös és újabb verziójával kompatibilis. Ezért előfordulhat, hogy a régi kódbázisok karbantartásakor talál npm-shrinkwrap.json . A legtöbb fejlesztő ahelyett fogja használni package-lock.json a npm-shrinkwrap.json. Az egyik kivétel npm-shrinkwrap.json a démonok és parancssori eszközök globális telepítése, ahol a fejlesztők biztosítani szeretnék a megadott csomagok pontos verzióinak telepítését.

Példa a csomagverzió meghatározására

Fontolja meg azt a forgatókönyvet, amelyben az 1.2-es verziót használja a kódban, majd az 1.4-es verziót adja ki, feltörve a kódot. Ha valaki ezen a ponton telepíti az alkalmazást, egy nem működő alkalmazást fog kapni. Ha azonban van egy package-lock.json fájl, amely az 1.2-es verziót adja meg, akkor az a verzió lesz telepítve.

Íme egy példa a csomag telepített verziójának meghatározására:

  • Ha a fájlok és package-lock.json a package.json fájlok megegyeznek egy verziószabályban, nincs ütközés. Ha például package.json az 1.4-es verziót adja meg 1.x és package-lock.json adja meg, akkor az 1.4-es verzió lesz telepítve.
  • Ha package.json egy konkrétabb verziót 1.8.xad meg, az felülírja a package-lock.json fájlt, amely az 1.4 régebbi verzióját állítja be. Ebben az esetben az 1.8.0-s vagy újabb javításverzió lesz telepítve, ha elérhető.

Elavult csomagok keresése és frissítése elavult npm használatával

A npm outdated parancs az újabb verziókkal rendelkező csomagok azonosítására szolgál. Futtatáskor a következő elavult csomagok listáját adja meg:

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

A kimenet oszlopai a következők:

Column Leírás
Csomag Az elavult csomag.
Aktuális A csomag jelenlegi telepített verziója.
Akartam A fájlban package.json megadott szemantikai mintának megfelelő legújabb verzió.
Legutóbbi A csomag legújabb verziója.
Hely A csomagfüggőség helye. A outdated parancs bejárja a különböző node_modules mappákban található összes telepített csomagot.
Attól függően, hogy A függőséget tartalmazó csomag.

Az npm-naplózással kapcsolatos biztonsági problémák kezelése

Minden alkalommal, amikor telepít vagy frissít egy csomagot, kap egy naplóválaszt, amely közli, hogy melyik verzió lett telepítve, és hogy vannak-e biztonsági rések. A napló felsorolja a biztonsági réseket. Ha kritikus vagy magas biztonsági résekkel rendelkezik, frissítse a csomagot.

Példa a naplóválaszra:

+ 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

A probléma megoldásához és a frissítés alkalmazásához futtassa a npm audit parancsot. Ez a parancs felsorolja az egyes biztonsági réseket.

A npm audit fix parancs úgy próbálja megoldani a biztonsági réseket, hogy egy alverzióra frissít, ahol a probléma nem létezik. Előfordulhat azonban, hogy ez nem érhető el, ha a javítás valójában a következő főverzióban található.

Ilyen esetekben előfordulhat, hogy használnia npm audit fix --forcekell, ami kompatibilitástörő változásokat eredményezhet a főverzióra való frissítéssel. A parancs futtatása olyan döntés, amelyet körültekintően kell eljárnia. Tisztában kell lennie a kompatibilitástörő változásokkal, és npm update érdemes frissítenie a kódot, beleértve a biztonsági réseket is.

A biztonsági rés olyan kódhibák, amelyeket a támadók kihasználhatnak rosszindulatú műveletek végrehajtására, ami veszélyeztetheti az adatokat és a rendszereket. Fontos, hogy ezeket a biztonsági réseket azonnal elhárítsuk.

A biztonsági rések gyakori felderítése miatt a GitHub rendelkezik egy olyan funkcióval, amely átvizsgálja az adattárakat, és automatikusan létrehoz egy olyan PRS-t, amely a biztonságosabb verziókra való frissítésre utal. A rendszeres futtatás npm audit jó gyakorlat a biztonsági rések azonosításához és javításához, hozzájárulva a projekt általános biztonságához.

A frissítésekhez ajánlott munkafolyamat a következő:

  1. npm run test: A frissítési folyamat megkezdése előtt ellenőrizze, hogy a meglévő tesztek sikeresek-e.
  2. npm audit: a jelenlegi verzió biztonsági réseinek ellenőrzéséhez. A forrásból származó npm audit információk azt javasolhatják, hogy frissítsen egy főverzióra. Ha vannak ilyenek, gondosan tekintse át a kompatibilitástörő módosításokat.
  3. npm outdated: az összes elavult csomag listázásához. Ez a parancs a Wanted, a Latest és a Location oszlopban nyújt információt.
  4. Frissítés a következővel npm update:
    • Kisebb projektek esetén (néhány függőség a package.jsonkövetkezőben: megpróbálhatja npm update frissíteni az összes függőséget, majd futtatni a teszteket.
    • Nagyobb projektek esetén (amelyekben számos függőség található: package.jsonfrissítsen egy csomagot vagy csomagcsaládot (például Next.js és React), majd futtassa a teszteket.
  5. npm audit: ellenőrizze, hogy nincsenek-e kritikus vagy magas biztonsági rések. Ha továbbra is fennállnak biztonsági rések, használja npm update a csomag nevét és a javasolt főverziót npm audit.
  6. npm run test Újra.
  7. Jelentkezzen be a package.json saját és package-lock.jsona .