Gyakorlat – Függőségek frissítéseinek kezelése a Node.js-projektben
A Tailwind Traders megbízásából egy olyan alkalmazáson dolgozik, amelynek néhány függősége elavult. Az alkalmazás kicsi, és csak néhány függőségből áll. A kód frissítésének egyszerűnek kell lennie. Ellenőrizze, hogy frissítheti-e az alkalmazást, hogy kihasználhassa a legújabb funkciókat. Közben javítsa ki az esetleges biztonsági réseket is.
Első lépések
Egy új terminálablakban (Ctrl + Shift + `) váltson a gyakorlat fájljait tartalmazó mappára:
cd ../7-exercise-dependency-management
Telepítse a függőségeket az alábbi paranccsal:
npm install
Látnia kell a telepített csomagok kimenetét és a biztonsági réseket.
Nyissa meg a package.json fájlt, és tekintse meg a szakaszt
dependencies
:"lodash": "^1.1.0", "node-fetch": "^1.0.2"
Figyelje meg, hogy a minták megadják a beszúrási (^) karaktert, amely azt jelzi, hogy az alverzió frissítései támogatják a függőségeket:
1.x
.Nyissa meg az index.js fájlt, hogy megértse, hogyan használják a csomagfüggőségeket az alkalmazásban:
const fetch = require('node-fetch') const _ = require('lodash'); const path = require('path'); const fs = require('fs'); async function run() { const response = await fetch("https://dev.to/api/articles?state=rising"); const json = await response.json(); const sorted = _.sortBy(json, ["public_reactions_count"], ['desc']); const top3 = _.take(sorted, 3); const filePrefix = new Date().toISOString().split('T')[0]; fs.writeFileSync(path.join(__dirname, `${filePrefix}-feed.json`), JSON.stringify(top3, null, 2)); } run();
Ez a kód adatokat kér le egy REST API-ból a
node-fetch
csomag használatával. Rendezéssel dolgozza fel a választ, és a csomag használatávallodash
az első három találatot veszi fel. Az eredményeket egy fájlban tárolja.
npm-naplózás
Ha szeretné megtudni, hogy vannak-e biztonsági rések, futtassa ezt a parancsot:
npm audit
A következő példához hasonló kimenetnek kell megjelennie:
# npm audit report
lodash <=4.17.20
Severity: critical
Regular Expression Denial of Service (ReDoS) in lodash - https://github.com/advisories/GHSA-x5rq-j2xg-h7qm
Prototype Pollution in lodash - https://github.com/advisories/GHSA-fvqr-27wr-82fm
Prototype Pollution in lodash - https://github.com/advisories/GHSA-jf85-cpcp-j695
Command Injection in lodash - https://github.com/advisories/GHSA-35jh-r3h4-6jhm
Prototype Pollution in lodash - https://github.com/advisories/GHSA-4xc9-xhrj-v574
Regular Expression Denial of Service (ReDoS) in lodash - https://github.com/advisories/GHSA-29mw-wpgm-hmr9
fix available via `npm audit fix --force`
Will install lodash@4.17.21, which is a breaking change
node_modules/lodash
node-fetch <=2.6.6
Severity: high
The `size` option isn't honored after following a redirect in node-fetch - https://github.com/advisories/GHSA-w7rc-rwvf-8q5r
node-fetch forwards secure headers to untrusted sites - https://github.com/advisories/GHSA-r683-j2x4-v87g
fix available via `npm audit fix --force`
Will install node-fetch@3.3.2, which is a breaking change
node_modules/node-fetch
2 vulnerabilities (1 high, 1 critical)
To address all issues (including breaking changes), run:
npm audit fix --force
A kimenet tartalmazza a biztonsági réseket és a hibát kijavító csomag verzióját.
Will install lodash@4.17.21, which is a breaking change
Will install node-fetch@3.3.2, which is a breaking change
npm elavult
A terminálban futtassa ezt a parancsot az elavult függőségek ellenőrzéséhez:
npm outdated
A következő példához hasonló kimenetnek kell megjelennie:
Package Current Wanted Latest Location Depended by
lodash 1.3.1 1.3.1 4.17.21 node_modules/lodash 7-exercise-dependency-management
node-fetch 1.7.3 1.7.3 3.3.2 node_modules/node-fetch 7-exercise-dependency-management
A jelenlegi és a kívánt verziók megegyeznek, de a legújabb verzió eltérő. A szemantikai frissítési stratégia teljesült, package.json
de a biztonsági rések továbbra is fennállnak.
npm-frissítés
Szerkessze a
package.json
fájlt, hogy explicit módon lehetővé teszi a nagyobb változtatásokat a biztonsági rések javításához, kezdve a jelentősebb csomaggal:"node-fetch": "^2.6.6"
Futtassa ezt a parancsot a frissítés végrehajtásának megtekintéséhez:
npm update --dry-run
added 3 packages, removed 4 packages, and changed 1 package in 508ms
Futtassa ezt a parancsot a projekt frissítéséhez a
package.json
következő alapján:npm update
Futtassa ezt a parancsot a biztonsági rés
node-fetch
kijavításához:npm audit
# npm audit report lodash <=4.17.20 Severity: critical Regular Expression Denial of Service (ReDoS) in lodash - https://github.com/advisories/GHSA-x5rq-j2xg-h7qm Prototype Pollution in lodash - https://github.com/advisories/GHSA-fvqr-27wr-82fm Prototype Pollution in lodash - https://github.com/advisories/GHSA-jf85-cpcp-j695 Command Injection in lodash - https://github.com/advisories/GHSA-35jh-r3h4-6jhm Prototype Pollution in lodash - https://github.com/advisories/GHSA-4xc9-xhrj-v574 Regular Expression Denial of Service (ReDoS) in lodash - https://github.com/advisories/GHSA-29mw-wpgm-hmr9 fix available via `npm audit fix --force` Will install lodash@4.17.21, which is a breaking change node_modules/lodash 1 critical severity vulnerability To address all issues (including breaking changes), run: npm audit fix --force
Ha a projekt rendelkezik tesztekkel, futtassa őket annak ellenőrzéséhez, hogy a frissítés nem tört-e el semmit.
Ugyanezekkel a lépésekkel biztonsági rések nélkül frissíthet
lo-dash
a4.17.20
verzióra.A biztonsági rések javítva vannak, de a
node-fetch
verzió még mindig a főverzió mögött áll. Ha az összes teszt sikeres, javítsa ki apackage.json
fájlban megadott verziót a legújabb verzióra:"node-fetch": "^3.3.2"
Ezután futtassa a következő parancsot a projekt frissítéséhez:
npm update
A projektnek most nem kell npm biztonsági résekkel rendelkeznie, és a jelenlegi főverzióban kell lennie.
Adja meg a fájlokat és
package-lock.json
apackage.json
fájlokat.Gratulálunk! Frissítette a függőségeket, és kijavította a projekt biztonsági réseit.
A fejlesztési tároló törlése
A projekt befejezése után érdemes lehet megtisztítani a fejlesztési környezetet, vagy vissza kell állítani a jellemző állapotba.
A GitHub Codespaces-környezet törlése biztosítja, hogy maximálisan kihasználható legyen a fiókhoz tartozó ingyenes óránkénti jogosultság.
Fontos
A GitHub-fiók jogosultságairól további információt a GitHub Codespaces havi tartalmazza a tárterületet és az alapórákat.
Jelentkezzen be a GitHub Codespaces irányítópultjára (https://github.com/codespaces).
Nyissa meg a kódtér helyi menüjét, és válassza a Törlés lehetőséget.