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

Tamamlandı

Tailwind Traders'ın geliştiricisi olarak paketlerimizi güncel tutmak önemlidir. Bu, en son özellikleri ve düzeltmeleri kullandığınızdan emin olmamıza yardımcı olur. Ayrıca güvenlik açıklarını önlememize de yardımcı olur. Bu ünitede node.js projesindeki bağımlılıkları yönetmeyi öğreneceksiniz. Paketleri güncelleştirme, anlamsal sürüm oluşturma ve güvenlik sorunlarını yönetme hakkında bilgi edineceksiniz.

Paketi güncelleştirmeden önce dikkat edilmesi gerekenler

Paketi güncelleştirmeden önce şunları göz önünde bulundurun:

  • Güncelleştirme Türü: Bunun küçük bir düzeltme mi, yeni bir özellik mi yoksa kodunuzu bozabilecek önemli bir değişiklik mi olduğunu anlayın. Anlamsal sürüm oluşturma, bunu tanımlamaya yardımcı olabilir.
  • Proje Yapılandırması: Beklenmeyen değişiklikleri önlemek için projenizin yalnızca istenen güncelleştirmeleri alacak şekilde ayarlandığından emin olun.
  • Güvenlik: Olası güvenlik açıklarından haberdar olun. Sorunlu paketleri tanımlamak ve güncelleştirmek için npm'nin denetim özelliğini kullanın.
  • Test: Testlerinizin güncelleştirmeden sonra geçtiğinden emin olun. Testleriniz yoksa bunları eklemeyi göz önünde bulundurun. Uygulamanız bir güncelleştirmeden sonra farklı davranabilir ve testler doğru davranışı doğrular.

Güncelleştirme davranışını tanımlamak için anlamsal sürüm oluşturma

Anlamsal sürüm oluşturma, yazılım geliştirmede önemli bir standarttır. Npm paketlerini hem yayımlamak hem de kullanmak için gereklidir. Yeni sürümdeki değişikliklerin türünü belirterek güncelleştirme risklerinin yönetilmesine yardımcı olur. Bir sürüm numarası, bu değişiklikleri yansıtacak belirli bölümlere sahiptir:

Sürüm Türü Position Sözdizimi Ne Olur? Güncelleştirme Yaklaşımı
Büyük 1. x.0.0 veya * 1.0.0'dan 2.0.0'a yapılan değişiklikler hataya neden olan değişiklikleri gösterir. Kod ayarlamaları gerekebilir. Olası kod değişikliklerini kabul ederek en son ana sürüme yönelik anında güncelleştirmeler konusunda rahat olun.
Küçük 2. 1.x.1 veya ^ 1.2.9'dan 1'e değişir.3.0 yeni özellikler sunar. Mevcut kod çalışmaya devam etmelidir. Güncelleştirmeler genellikle güvenlidir. Yeni özelliklere açık, ancak hataya neden olan değişikliklere açık değil.
Patch 3. 1.1.x veya ~ 1.0.7'den 1.0'a değişir.8 ortalama hata düzeltmeleri. Güncelleştirmeler güvende olmalı. Hata düzeltmeleri kabul edildi.

Küçük Node.js projeleri için en son sürümlere ücretsiz olarak güncelleştirebilirsiniz. Ancak daha büyük projeler için güncelleştirmelerin dikkatli bir şekilde düşünülmüş olması gerekir ve her zaman otomatik değildir. Genel olarak, kendi bağımlılıklarının daha azıyla daha küçük bağımlılıkların güncelleştirilmesi süreci kolaylaştırır.

Bir veya daha fazla bağımlılığı güncelleştirmeden önce, komutunu çalıştırdığınızda npm update <name of dependency> öngörülebilir davranışlar elde etmek için dosyanızı yapılandırmanız package.json gerekir. Node.js, paketlerinizin nasıl güncelleştirilmesini istediğinizi tanımlamanızı sağlayan simge kümesini kullanır.

Bir paketi npm CLI ile güncelleştirme

npm'de install veya update komutunu kullanarak bir paket yükleyebilirsiniz. Bu komutlar artık çoğunlukla değiştirilebilir. Bir paketi güncelleştirmek için genellikle şunları kullanırsınız:

  • En son sürüm: npm update <package name>@latest.
  • Belirli sürüm: npm update <package name>@<optional version number>.

Güncelleştirme işlemi iki faktöre bağlıdır:

  • Sürüm Bağımsız Değişkeni: Komutta npm update bir sürüm numarası belirtilirse, npm belirli bir sürümü getirir ve yükler.
  • Bildirim Dosyası Girdisi: Dosya package.json bağımlılıkları güncelleştirmek için kurallar içerir. Örneğin, "dependencyName": "1.1.x" npm'nin bu desenle eşleşen sürümü getireceği anlamına gelir.

Sürüm oluşturma işlemini anlama

Bağımlılıkların sürümünü üç dosya denetler:

  • package.json: Bu dosya, kullanmak istediğiniz paketin sürümünü tanımlar. Bu, projenizin bildirim dosyasıdır. Bağımlılıklar dahil olmak üzere projenizin meta verilerini içerir.
  • package-lock.json: Bu dosya, ara bağımlılık güncelleştirmelerinden bağımsız olarak sonraki yüklemelerin aynı ağaçları oluşturabilmesi için oluşturulan tam ağacı açıklar. Bu dosyanın kaynak depolara işlenmesi amaçlanmıştır.
  • shrinkwrap.json: Bu dosya CLI komutu tarafından npm shrinkwrap oluşturulur ve ile package-lock.jsonbenzerdir. Komutlar arasındaki en büyük fark, içinde npm-shrinkwrap.json belirtilen paket sürümlerinin kullanıcılar tarafından geçersiz kılınamamasıdır. Ayrıca, npm-shrinkwrap.json dosya npm'nin eski sürümleriyle (sürüm 2-4) uyumluyken package-lock.json npm sürüm 5 ve üzeriyle uyumludur. Bu nedenle, eski kod temellerini korurken bulabilirsiniz npm-shrinkwrap.json . Geliştiricilerin çoğu yerine npm-shrinkwrap.jsonkullanırpackage-lock.json. Tercih edilen durumlardan npm-shrinkwrap.json biri, geliştiricilerin belirtilen paketlerin tam sürümlerinin yüklendiğinden emin olmak istediği genel daemon yüklemeleri ve komut satırı araçlarıdır.

Paket sürümünün örnek belirlenmesi

Kodunuzda sürüm 1.2'yi kullandığınız ve ardından sürüm 1.4'in yayınlandığı ve kodunuzu bozduğu bir senaryo düşünün. Birisi uygulamanızı bu noktada yüklerse, işlevsiz bir uygulama alır. Ancak, sürüm 1.2'yi belirten bir package-lock.json dosya varsa bu sürüm yüklenir.

Bir paketin hangi sürümünün yüklü olduğunu belirlemeye yönelik bir örnek aşağıda verilmiştir:

  • package.json ve package-lock.json dosyaları sürüm kuralında kabul ederse çakışma olmaz. Örneğin, sürüm 1.4'ü belirtir 1.x ve package-lock.json belirtirsepackage.json, sürüm 1.4 yüklenir.
  • gibi 1.8.xdaha belirli bir sürüm belirtirsepackage.json, eski 1.4 sürümünü belirten dosyayı geçersiz kılarpackage-lock.json. Bu durumda, varsa sürüm 1.8.0 veya sonraki bir düzeltme eki sürümü yüklenir.

Npm'nin güncel olmayan paketleri bulma ve güncelleştirme

npm outdated komutu, daha yeni sürümlere sahip paketleri tanımlamak için kullanılır. Çalıştırıldığında, bu eski paketlerin listesini sağlar:

Package       Current    Wanted   Latest     Location     Depended by
lodash        1.0.0      1.0.0    4.17.19    lock-test    main-code-file
node-fetch    1.2.0      1.2.0    2.6.0      lock-test    function-code-file

Çıktıdaki sütunlar şunlardır:

Sütun Açıklama
Paket Eski paket.
Geçerli Paketin yüklü geçerli sürümü.
Iste Dosyada package.json belirttiğiniz anlam düzeniyle eşleşen en son sürüm.
En geç Paketin en son sürümüdür.
Konum Paket bağımlılığının konumu. Komut, outdated çeşitli node_modules klasörlerdeki tüm yüklü paketlerde gezinilir.
Bağlı olan Bağımlılığı olan paket.

npm denetimiyle ilgili güvenlik sorunlarını yönetme

Bir paketi her yüklediğinizde veya güncelleştirdiğinizde, hangi sürümün yüklü olduğunu ve herhangi bir güvenlik açığı olup olmadığını bildiren bir günlük yanıtı alırsınız. Günlükte güvenlik açıkları listelenir. Kritik veya yüksek güvenlik açıklarınız varsa paketi güncelleştirmeniz gerekir.

Günlük yanıtına örnek olarak:

+ lodash@1.3.1
added 1 package from 4 contributors and audited 1 package in 0.949s
found 3 vulnerabilities (1 low, 2 high)
  run `npm audit fix` to fix them, or `npm audit` for details

Bir sorunu düzeltmek ve güncelleştirme uygulamak için komutunu çalıştırabilirsiniz npm audit . Bu komut her güvenlik açığını listeler.

Komut, npm audit fix sorunun mevcut olmadığı ikincil bir sürüme yükselterek güvenlik açıklarını çözmeyi dener. Ancak, düzeltme aslında bir sonraki ana sürümdeyse bu kullanılamayabilir.

Bu gibi durumlarda, ana sürüme güncelleştirerek hataya neden olabilecek değişikliklere neden olabilecek seçeneğini kullanmanız npm audit fix --forcegerekebilir. Bu komutu çalıştırmak, dikkatli bir şekilde yapmanız gereken bir karardır. Hataya neden olan değişikliklerden haberdar olmanız ve güvenlik açıkları dahil olmak üzere kodunuzu güncelleştirmek için kullanmanız npm update gerekir.

Güvenlik açığı , kötü amaçlı eylemler gerçekleştirmek için saldırganlar tarafından kötüye kullanılabilecek ve verilerinizin ve sistemlerinizin güvenliğini tehlikeye atabilecek bir kod açığıdır. Bu güvenlik açıklarını hemen ele almak çok önemlidir.

GitHub, güvenlik açıklarının sık keşfedilmesi nedeniyle depoları tarar ve otomatik olarak daha güvenli sürümlere yükseltme öneren PR'ler oluşturur. Düzenli olarak çalışmak npm audit , güvenlik açıklarını belirlemek ve düzeltmek için iyi bir uygulamadır ve projenizin genel güvenliğine katkıda bulunur.

Güncelleştirmeler için önerilen iş akışı:

  1. npm run test: Bu güncelleştirme işlemine başlamadan önce mevcut testlerinizin geçtiğini doğrulayın.
  2. npm audit: kullandığınız geçerli sürümdeki güvenlik açıklarını denetlemek için. gelen npm audit bilgiler ana sürüme güncelleştirmenizi önerebilir. Listede hataya neden olan değişiklikleri dikkatle gözden geçirmeniz gerekir.
  3. npm outdated: tüm eski paketleri listelemek için. Bu komut Aranıyor, En Son ve Konum sütunlarında bilgi sağlar.
  4. ile npm updategüncelleştirin:
    • Daha küçük projeler için (içindeki package.jsonbirkaç bağımlılık) tüm bağımlılıkları güncelleştirmeye çalışabilir npm update ve ardından testlerinizi çalıştırabilirsiniz.
    • Daha büyük projeler için (içinde birçok bağımlılık package.jsonvardır: tek bir paketi veya paket ailesini (Next.js ve React gibi) güncelleştirin ve testleri çalıştırın.
  5. npm audit: kritik veya yüksek güvenlik açıkları olmadığını denetleyin. Güvenlik açıkları hala mevcutsa paket adı ve içinde npm auditönerilen ana sürümle kullanınnpm update.
  6. npm run test Tekrar.
  7. ve package-lock.jsonöğesini iade package.json edin.