Cvičení – správa aktualizací závislostí ve vašem projektu Node.js.
Ve společnosti Tailwind Traders jste dostali za úkol vyřešit aplikaci s několika zastaralými závislostmi. Aplikace je malá a má jenom několik závislostí. Aktualizace kódu by měla být jednoduchá. Podívejte se, jestli můžete aplikaci aktualizovat tak, aby využívala nejnovější funkce. A když už se do toho pustíte, zkontrolujte ji z hlediska ohrožení zabezpečení a případně ji rovnou opravte.
Začínáme
V novém okně terminálu (Ctrl + Shift + `) přejděte do složky se soubory pro toto cvičení:
cd ../7-exercise-dependency-management
Spuštěním tohoto příkazu nainstalujte závislosti:
npm install
Měl by se zobrazit výstup o nainstalovaných balíčcích a všech ohroženích zabezpečení.
Otevřete soubor package.json a prohlédněte
dependencies
si část:"lodash": "^1.1.0", "node-fetch": "^1.0.2"
Všimněte si, že vzory určují znak vložení (^), který indikuje aktualizace podverze pro podporu závislostí:
1.x
.Otevřete soubor index.js, abyste pochopili, jak se v aplikaci používají závislosti balíčků:
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();
Tento kód načítá data z rozhraní REST API pomocí
node-fetch
balíčku. Zpracuje odpověď tím, že ji seřadí a vezme nejlepší tři výsledky pomocílodash
balíčku. Výsledek se uloží do souboru.
npm audit
Pokud chcete zjistit, jestli nedošlo k nějakým ohrožením zabezpečení, spusťte tento příkaz:
npm audit
Měl by se zobrazit výstup podobný tomuto příkladu:
# 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
Výstup uvádí chyby zabezpečení a verzi balíčku, který problém řeší.
Will install lodash@4.17.21, which is a breaking change
Will install node-fetch@3.3.2, which is a breaking change
npm zastaralé
V terminálu spusťte tento příkaz a zkontrolujte zastaralé závislosti:
npm outdated
Měl by se zobrazit výstup podobný tomuto příkladu:
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
Aktuální a požadované verze jsou stejné, ale nejnovější verze se liší. Strategie sémantických aktualizací zadaná v package.json
uvedeném seznamu byla splněna, ale ohrožení zabezpečení stále existují.
npm update
package.json
Upravte soubor tak, aby explicitně umožňovaly významné změny, které opraví ohrožení zabezpečení, počínaje tím důležitějším balíčkem:"node-fetch": "^2.6.6"
Spuštěním tohoto příkazu zjistíte, co by aktualizace udělala:
npm update --dry-run
added 3 packages, removed 4 packages, and changed 1 package in 508ms
Spuštěním tohoto příkazu aktualizujte projekt na
package.json
základě:npm update
Spuštěním tohoto příkazu zobrazte chybu zabezpečení, která
node-fetch
byla opravena: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
Pokud má váš projekt nějaké testy, spusťte je a ověřte, že aktualizace nic neporušila.
Stejným postupem aktualizujte
lo-dash
verzi4.17.20
bez ohrožení zabezpečení.Tato ohrožení zabezpečení jsou opravená, ale
node-fetch
verze je stále hlavní verzí. Pokud všechny testy projdou, opravte verzi zadanou vpackage.json
souboru na nejnovější verzi:"node-fetch": "^3.3.2"
Potom spuštěním následujícího příkazu aktualizujte projekt:
npm update
Váš projekt by teď neměl mít žádné chyby zabezpečení npm a měl by být v aktuální hlavní verzi.
Přihlaste se
package.json
se změnami apackage-lock.json
soubory.Blahopřejeme! Aktualizovali jste závislosti a opravili jste ohrožení zabezpečení v projektu.
Vyčištění vývojového kontejneru
Po dokončení projektu můžete chtít vyčistit vývojové prostředí nebo ho vrátit do typického stavu.
Odstraněním prostředí GitHub Codespaces zajistíte, že můžete maximalizovat nárok na počet bezplatných hodin za jádro, které získáte pro svůj účet.
Důležité
Další informace o oprávněních účtu GitHub najdete v tématu GitHub Codespaces měsíčně zahrnuté hodiny úložiště a jádra.
Přihlaste se k řídicímu panelu GitHub Codespaces (https://github.com/codespaces).
Otevřete místní nabídku pro codespace a vyberte Odstranit.