Alıştırma - Node.js projenizde bağımlılık güncelleştirmelerini yönetme
Tailwind Traders sizi bazı eski bağımlılıkları olan bir uygulama üzerinde çalışmakla görevlendirdi. Uygulama küçüktür ve yalnızca birkaç bağımlılığı vardır. Kodu güncelleştirmek kolay olmalıdır. Uygulamayı en yeni özelliklerden yararlanacak şekilde güncelleştirmeniz gerekiyor. Ayrıca güvenlik açığı yakalarsanız bunları da düzeltmeniz şart.
Başlarken
Yeni bir terminal penceresinde (Ctrl + Shift + `), bu alıştırmanın dosyalarını içeren klasöre geçin:
cd ../7-exercise-dependency-management
Şu komutu çalıştırarak bağımlılıkları yükleyin:
npm install
Yüklenen paketler ve güvenlik açıkları hakkındaki çıktıyı görmeniz gerekir.
package.json dosyasını açın ve bölümüne bakın
dependencies
:"lodash": "^1.1.0", "node-fetch": "^1.0.2"
Desenlerin, bağımlılıkları desteklemek için ikincil sürüme yapılan güncelleştirmeleri gösteren insert (^) karakterini belirttiğine dikkat edin:
1.x
.Paket bağımlılıklarının uygulamada nasıl kullanıldığını anlamak için index.js dosyasını açın:
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();
Bu kod, paketini kullanarak
node-fetch
rest API'den veri çeker. Yanıtı sıralayarak işler ve paketi kullanaraklodash
ilk üç sonucu alır. Sonuç bir dosyada depolanır.
npm denetimi
Herhangi bir güvenlik açığı olup olmadığını anlamak için şu komutu çalıştırın:
npm audit
Bu örneğe benzer bir çıktı görmeniz gerekir:
# 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
Çıkışta sorunu gideren güvenlik açıkları ve paketin sürümü belirtiliyor.
Will install lodash@4.17.21, which is a breaking change
Will install node-fetch@3.3.2, which is a breaking change
npm güncel değil
Terminalde, eski bağımlılıkları denetlemek için şu komutu çalıştırın:
npm outdated
Bu örneğe benzer bir çıktı görmeniz gerekir:
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
Geçerli ve istenen sürümler aynıdır, ancak en son sürüm farklıdır. içinde package.json
belirtilen anlamsal güncelleştirme stratejisi karşılandı, ancak güvenlik açıkları hala var.
npm güncelleştirmesi
package.json
Dosyayı, daha önemli bir paketle başlayarak güvenlik açıklarını düzeltmeye yönelik büyük değişikliklere açıkça izin veren şekilde düzenleyin:"node-fetch": "^2.6.6"
Güncelleştirmenin ne yapacağını görmek için şu komutu çalıştırın:
npm update --dry-run
added 3 packages, removed 4 packages, and changed 1 package in 508ms
Bu komutu çalıştırarak projeyi temel alarak güncelleştirin
package.json
:npm update
Güvenlik açığının düzeltildiğini görmek için
node-fetch
şu komutu çalıştırın: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
Projenizde herhangi bir test varsa, güncelleştirmenin herhangi bir şeyi bozmadığını doğrulamak için bunları çalıştırın.
Güvenlik açıkları olmadan sürüme güncelleştirmek
lo-dash
için4.17.20
aynı adımları kullanın.Güvenlik açıkları düzeltildi, ancak
node-fetch
sürüm hala ana sürümde. Tüm testleriniz başarılı olursa, dosyadapackage.json
belirtilen sürümü en son sürüme düzeltin:"node-fetch": "^3.3.2"
Ardından aşağıdaki komutu çalıştırarak projeyi güncelleştirin:
npm update
Projenizde artık npm güvenlik açığı olmaması ve geçerli ana sürümde olması gerekir.
ve
package-lock.json
dosyalarınızı iadepackage.json
edin.Tebrikler! Bağımlılıkları güncelleştirdiniz ve projedeki güvenlik açıklarını düzeltdiniz.
Temizleme geliştirme kapsayıcısı
Projeyi tamamladıktan sonra geliştirme ortamınızı temizlemek veya normal durumuna döndürmek isteyebilirsiniz.
GitHub Codespaces ortamını silmek, hesabınız için elde ettiğiniz ücretsiz çekirdek başına saat yetkilendirmesi miktarını en üst düzeye çıkarmanızı sağlar.
Önemli
GitHub hesabınızın yetkilendirmeleri hakkında daha fazla bilgi için bkz . GitHub Codespaces aylık dahil depolama ve çekirdek saatler.
GitHub Codespaces panosunda (https://github.com/codespaces ) oturum açın.
Codespace bağlam menüsünü açın ve Sil'i seçin.