Node.js projenizde bağımlılık güncelleştirmelerini yönetme
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ındannpm shrinkwrap
oluşturulur ve ilepackage-lock.json
benzerdir. Komutlar arasındaki en büyük fark, içindenpm-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) uyumluykenpackage-lock.json
npm sürüm 5 ve üzeriyle uyumludur. Bu nedenle, eski kod temellerini korurken bulabilirsiniznpm-shrinkwrap.json
. Geliştiricilerin çoğu yerinenpm-shrinkwrap.json
kullanırpackage-lock.json
. Tercih edilen durumlardannpm-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
vepackage-lock.json
dosyaları sürüm kuralında kabul ederse çakışma olmaz. Örneğin, sürüm 1.4'ü belirtir1.x
vepackage-lock.json
belirtirsepackage.json
, sürüm 1.4 yüklenir.- gibi
1.8.x
daha 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 --force
gerekebilir. 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.
Önerilen güncelleştirme iş akışı
Güncelleştirmeler için önerilen iş akışı:
npm run test
: Bu güncelleştirme işlemine başlamadan önce mevcut testlerinizin geçtiğini doğrulayın.npm audit
: kullandığınız geçerli sürümdeki güvenlik açıklarını denetlemek için. gelennpm audit
bilgiler ana sürüme güncelleştirmenizi önerebilir. Listede hataya neden olan değişiklikleri dikkatle gözden geçirmeniz gerekir.npm outdated
: tüm eski paketleri listelemek için. Bu komut Aranıyor, En Son ve Konum sütunlarında bilgi sağlar.- ile
npm update
güncelleştirin:- Daha küçük projeler için (içindeki
package.json
birkaç bağımlılık) tüm bağımlılıkları güncelleştirmeye çalışabilirnpm update
ve ardından testlerinizi çalıştırabilirsiniz. - Daha büyük projeler için (içinde birçok bağımlılık
package.json
vardır: tek bir paketi veya paket ailesini (Next.js ve React gibi) güncelleştirin ve testleri çalıştırın.
- Daha küçük projeler için (içindeki
npm audit
: kritik veya yüksek güvenlik açıkları olmadığını denetleyin. Güvenlik açıkları hala mevcutsa paket adı ve içindenpm audit
önerilen ana sürümle kullanınnpm update
.npm run test
Tekrar.- ve
package-lock.json
öğesini iadepackage.json
edin.