Függőségek frissítéseinek kezelése a Node.js-projektben
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 parancssorinpm shrinkwrap
felület parancsa hozza létre, és hasonló a következőhözpackage-lock.json
: . A parancsok közötti fő különbség az, hogy a megadottnpm-shrinkwrap.json
csomagverziókat a felhasználók nem bírálhatják felül. Emellett anpm-shrinkwrap.json
fájl kompatibilis az npm régebbi verzióival (2-4-es verzió), mígpackage-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álnpm-shrinkwrap.json
. A legtöbb fejlesztő ahelyett fogja használnipackage-lock.json
anpm-shrinkwrap.json
. Az egyik kivételnpm-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
apackage.json
fájlok megegyeznek egy verziószabályban, nincs ütközés. Ha példáulpackage.json
az 1.4-es verziót adja meg1.x
éspackage-lock.json
adja meg, akkor az 1.4-es verzió lesz telepítve. - Ha
package.json
egy konkrétabb verziót1.8.x
ad meg, az felülírja apackage-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 --force
kell, 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.
Ajánlott frissítési munkafolyamat
A frissítésekhez ajánlott munkafolyamat a következő:
npm run test
: A frissítési folyamat megkezdése előtt ellenőrizze, hogy a meglévő tesztek sikeresek-e.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.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.- Frissítés a következővel
npm update
:- Kisebb projektek esetén (néhány függőség a
package.json
következőben: megpróbálhatjanpm 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.json
frissítsen egy csomagot vagy csomagcsaládot (például Next.js és React), majd futtassa a teszteket.
- Kisebb projektek esetén (néhány függőség a
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áljanpm update
a csomag nevét és a javasolt főverziótnpm audit
.npm run test
Újra.- Jelentkezzen be a
package.json
saját éspackage-lock.json
a .