Bölüm 2: Package.json yapısı ve Npm (Node Package Manager) özet bilgiler

Merhabalar arkadaşlar. React Native yolunda ilk olarak özet bilgilerle pratik bir npm makalesi hazırladım. Umarım beğenirsiniz.

Vs code’da terminale md NpmEgitim yazılarak NpmEgitim klasörü oluşturulur. Sonra File →Open Folder menüsünden NpmEgitim klasörü seçilir.

1. Terminalde (Ctrl+” kısayolu) npm init — yes komutu çalıştırılarak package.json dosyası aşağıdaki şekilde otomatik olarak oluşturulur:

{
“name”: “NpmEgitim”,
“version”: “1.0.0”,
“description”: “”,
“main”: “index.js”,
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1"
},
“keywords”: [],
“author”: “”,
“license”: “ISC”
}

Ctrl+Shift+ E kısayolu ile ulaşabileceğimiz explorerdan package.json dosyasını açın. Package.json dosyasını incelemeye başlayabiliriz.

2.name” alanı hep küçük harften, boşluksuz tek kelime fakat “-” veya ”_” karakterlerine izin verecek şekilde oluşturulabilir. Bu durumda name alanı aşağıdaki gibi tanımlanabilir:

{
“name”:”npmegitim”,
...
}

3.version” alanı 1.4.5 şeklinde olmalı. Uygulamalarımızda versiyon ayarlaması şöyle olabilir. Örneğin uygulamaya yeni özellik eklemeden sadece bir hatayı düzelttiysek 1.4.6 şeklinde sürümü ayarlayabiliriz. Eğer yeni bir işlev kazandırdıysak uygulamanın sürümünü 1.5.0 şeklinde ayarlayabiliriz. Eğer uygulama geriye uyumluluğunu kaybettiyse yani ciddi bir değişim söz konusu ise sürüm 2.0.0 şeklinde bir üst sürüm numarası olmalı.

{
"name": "npmegitim",
"version": "1.0.0",
...
}

4. description” alanına projeye uygun kısa bir tanımlama girilebilir:

{
“name”: “npmegitim”,
“version”: “1.0.0”,
“description”: “Npm eğitimi için hazırladığım küçük proje”,
...
}

5. Terminalden npm init — yes komutu ile package.json dosyası oluşturulduğunu biliyoruz. Fakat bu komut ile

dependencies (uygulamanın çalışması için gerekli olan paketler) ve devDependencies (sadece uygulamayı geliştirdiğimiz ortamda kullanılan üretim ortamına aktarılmayan paketler)

alanları oluşmayacağından biraz sonra oluşturacağız. Öncelikle uygulamanın çalışması için bağımlı olduğu farazi bir paket kuralım. Terminalden

npm install underscore — save (save parametresinden önce çift eksi var) komutunu çalıştıralım.

{
"name": "npmegitim",
"version": "1.0.0",
"description": "Npm eğitimi için hazırladığım küçük proje",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"underscore": "^1.8.3"
}
}

6. Sırada sadece uygulamayı geliştirirken ihtiyaç duyduğumuz uygulama geliştirme konforumuzu arttıran fakat uygulamanın kendisi için gerekli olmayan bir paket kurma var. Terminalden

npm install typescript — save-dev

komutunu çalıştırıyoruz. Pacakage.json’ın son hali:

{
“name”: “npmegitim”,
“version”: “1.0.0”,
“description”: “Npm eğitimi için hazırladığım küçük proje”,
“main”: “index.js”,
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1"
},
“keywords”: [],
“author”: “”,
“license”: “ISC”,
“dependencies”: {
"underscore": "^1.8.3"
},
“devDependencies”: {
"typescript": "^2.4.2"
}
}

Dikkat ederseniz yazdığımız her iki komutta da — save parametresi kullandık. Save parametresi ile projeye eklediğimiz paketlerin package.json dosyasında görünmesini sağlıyoruz. Ayrıca npm install komutlarından sonra projenin dosya yapısını değiştiğini gözlemleyebilirsiniz:

npm install komutu ile kurduğumuz her paket node_modules klasörü altına kurulur.

7. Package.json dosyanızı bir arkadaşınızla paylaşabilirsiniz. Fakat arkadaşınızda henüz bu iki paket kurulu değil. Tek tek kurması mı gerekecek? Hayır. Tek yapması gereken terminalden npm install komutunu çalıştırmak.

8. Dependencies kısmındaki sürüm numarasından önce gelen ^ sembolüne değinmeliyiz. Arkadaşınız npm install komutunu çalıştırdığında örneğin package.json dosyasında typescript paketinin versiyonu 2.4.2 olmasına rağmen hali hazırda var olan en üst sürümünü (3.0.0 a kadar) kuracağı anlamına geliyor.

9. ^ gibi bir başka kullanılan sembol ise ~ sembolü. ~ sembolü daha kısıtlayıcı bir sembol. Yukarıdaki örnekten devam edersek arkadaşınız en fazla 2.5.0 sürümüne en yakın sürüm numaralı paketi kurabilir anlamına geliyor.

10. Şimdi concurrently ve rimraf adında paketleri

npm install concurrently — save

npm install rimraf — save-dev

komutu ile kuralım.

{
"dependencies": {
"concurrently": "^3.5.0",
"underscore": "^1.8.3"
},
“devDependencies”: {
“rimraf”: “^2.6.1”,
“typescript”: “^2.4.2”
}
}

Rimrafı projeden kaldırmak için

npm uninstall rimraf — save-dev

komutunu kullanabiliriz.

11. Örneğin rimraf adlı paketin özel bir sürümünü kurmak istiyorsak

npm install rimraf@2.5.2 — save-dev

komutunu çalıştırmalıyız.

{
"dependencies": {
"concurrently": "^3.5.0",
"underscore": "^1.8.3"
},
“devDependencies”: {
“rimraf”: “^2.5.2”,
“typescript”: “^2.4.2”
}
}

12. Bir pakete ait (mesela rimraf) tüm bilgileri görmek için

npm view rimraf

komutu çalıştırılır.

Sadece daha önce yayınlanmış versiyon bilgilerini görmek için

npm view rimraf versions

13. Bir paketin daha güncel sürümü var mı öğrenmek için

npm outdated

komutu çalıştırılır. Current sütunu kurulu paket sürümünü, Latest sütunu paketin kullanıma hazır (beta olmayan) en son sürümünü, Wanted sütunu ise package.json’da kullanılan ^ veya ~ tanımlamalarına karşılık gelen maksimum sürüm numarasını gösterir.

14. Paket güncellemek için npm update paketadi— save(-dev) komutu çalıştırılır.

npm update rimraf — save-dev

Görüleceği üzere rimraf’ın sürümü yeniden en güncel olan 2.6.1 oldu.

15. npm install rimraf@2.5.1 — save-dev

komutu ile rimrafın sürümünü tekrar 2.5.1'e çekelim. Eğer bu sürümün npm install komutu ile daha yeni bir sürüme güncellenmesini istemiyorsak

npm install rimraf — savedev — save-exact

komutunu çalıştırabiliriz. Package.json dosyasından da görüleceği üzere rimraf sürüm numarasının önündeki ^ işareti kalktı. Yani oluşturduğumuz package.json’ı kullanan başka birinin sadece exact ile kurulan sürümü kullanacağını garanti ederiz.

16. npm help ile tüm npm komutlarını görebilirsin.

17. npm bugs react-native yazarak react-native github projesinin tüm buglarını tarayıcıda görebilirsiniz.

npm docs typescript

komutu ile belirtieln paketin eğer mevcut ise dokümantasyon sayfasını tarayıcıda açabiliriz.

18. Hem npm install hem de npm uninstall komutu çalıştırırken — save eki ile çalıştırılmalı. Eğer paket devDependencies kısmında ise — save-dev eki ile çalıştırılmalı.

19. npm dedupe komutu ile node_modules klasörü altındaki dosya yapısı optimize edilir. Yine

npm prune

komutu ile projemizde hiç kullanılmayan paketler projeden temizlenebilir.

20. npm ls ile kurulu tüm paketleri listeleyebiliriz. npm ls -depth=0 komutu ile sadece en üst hiyerarşideki paketleri (alt paketlerini değil) listeleriz.

Başka bir yazıda görüşmek üzere hepinize güzel günler.