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ı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ındaki 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 belirtilen 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.
