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

Befejeződött

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

  1. Egy új terminálablakban (Ctrl + Shift + `) váltson a gyakorlat fájljait tartalmazó mappára:

    cd ../7-exercise-dependency-management
    
  2. 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.

  3. 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.

  4. 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ával lodash 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

  1. 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"
    
  2. 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
    
  3. Futtassa ezt a parancsot a projekt frissítéséhez a package.jsonkövetkező alapján:

    npm update
    
  4. 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
    
  5. Ha a projekt rendelkezik tesztekkel, futtassa őket annak ellenőrzéséhez, hogy a frissítés nem tört-e el semmit.

  6. Ugyanezekkel a lépésekkel biztonsági rések nélkül frissíthet lo-dash a 4.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 a package.json fájlban megadott verziót a legújabb verzióra:

    "node-fetch": "^3.3.2"
    
  7. 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.

  8. Adja meg a fájlokat és package-lock.json a package.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.

  1. Jelentkezzen be a GitHub Codespaces irányítópultjára (https://github.com/codespaces).

    Screenshot of all the running codespaces including their status and templates.

  2. Nyissa meg a kódtér helyi menüjét, és válassza a Törlés lehetőséget.

    Screenshot of the context menu for a single codespace with the delete option highlighted.