Alıştırma - Node.js projenizde bağımlılık güncelleştirmelerini yönetme

Tamamlandı

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

  1. Yeni bir terminal penceresinde (Ctrl + Shift + `), bu alıştırmanın dosyalarını içeren klasöre geçin:

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

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

  4. 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 kullanarak lodash 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

  1. 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"
    
  2. 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
    
  3. Bu komutu çalıştırarak projeyi temel alarak güncelleştirin package.json:

    npm update
    
  4. 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
    
  5. Projenizde herhangi bir test varsa, güncelleştirmenin herhangi bir şeyi bozmadığını doğrulamak için bunları çalıştırın.

  6. Güvenlik açıkları olmadan sürüme güncelleştirmek lo-dash için 4.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, dosyada package.json belirtilen sürümü en son sürüme düzeltin:

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

  8. ve package-lock.json dosyalarınızı iade package.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.

  1. GitHub Codespaces panosunda (https://github.com/codespaces ) oturum açın.

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

  2. Codespace bağlam menüsünü açın ve Sil'i seçin.

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