2474

Node.js ile Sıfırdan İleri Seviye Web Geliştirme

Node.js NPM

Node.js dersleri serimizin bu bölümünde node package manager (npm) nedir ve npm ile nasıl çalışırız, öğrenelim.

NPM Nedir?

Npm, node.js kurulumuyla birlikte bilgisayarımıza kurulan bir paket yönetim uygulamasıdır.

npmjs.com kütüphane havuzundaki binlerce kullanışlı paket içerisinden istediğimiz paketi npm sayesinde projemize saniyeler içerisinde yükleyebiliriz.

Bir programlama dilinin yeteneklerinden ve popülerliğinden söz etmek için en önemli konulardan biri işlerimizi kolaylaştıracak kütüphaneleri bize sunmasıdır.Bir programlama dili ne kadar yoğun kullanılırsa işimizi kolaylaştıracak kütüphane, makale, video benzeri yardımcı kaynaklar o kadar fazladır. Bunların hepsi uygulama geliştiricinin hayatını kolaylaştıracak konulardır.

Npm Kurulumu

Nodejs.org sayfasından node kurulumu yaptığımızda npm kurulumu da bilgisayarımıza yapılır.

npm --version

ile kurulu npm versiyonunu öğrenebilirsiniz.

Npm ile Local Paket Yükleme

Npm ile projemize bir paketi yüklemek için aşağıdaki komutu çalıştırmalısınız. Komutu çalıştırdığınız dizin proje dizini olmalıdır.

Örneğin masaüstüne oluşturduğumuz website klasörüne geçiş yaparak npm install komutu yardımıyla proje içerisine slugify isimli kütüphaneyi kuralım.

C:\users\sadikturan\desktop\website> npm install slugify

slugify kütüphanesi kendine gönderilen bir string bilgiyi url içerisinde olmasına izin verilen karakterlerle değiştirir. Örneğin; bir makale başlığı için "node.js dersleri" bilgisini gönderirsiniz kütüphane size "nodejs-dersleri" bilgisini gönderir. 

Yüklenen kütüphaneler projeye eklenecek olan node_modules klasöründe yer alırlar. Bu klasör ilk npm install komutuyla oluşturulur.

Ancak projenin kullandığı kütüphanelerin dışında bu kütüphane isimlerini de bir yerde tutmamız gerekir. Çünkü en basiti projenizi github' a yüklemek istediğinizde node_modules klasörünü yüklenmez çünkü çok yer kaplar ve sadece projeyi yüklersiniz. Ancak projeyi indirip kullanacak kişi projenin kullandığı paketlerin neler olduğunu bilmek ister. Yani bu proje hangi kütüphaneleri kullanıyorsa hangi kütüphanelere bağımlılığı varsa isimlerine bakar ve gerekli kütüphaneleri projeye tekrar yükler ve projeyi çalıştırır.

Projedeki kütüphane meta bilgilerini packages.json dosyasında saklarız. Bu dosyayı projeye dahil etmek için npm init --yes komutunu çalıştırınız.

packages.json

{
  "name": "example",
  "version": "1.0.0",
  "description": "", 
  "main": "index.js", 
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "", 
  "keyword": "", 
  "license": "ISC"
}

packages.json dosyasında paket versiyonları dışında proje hakkında bir çok bilgi içerir. İsteğe göre bu bilgiler doldurulabilir.

npm install ile yüklediğiniz her paket ismi ve versiyon numarası packages.json dosyasında dependencies kısmına kayıt edilir.

"dependencies": {
    "slugify": "^1.6.5"
}

Projemizde artık packages.json dosyası ve bir node_modules klasörümüz mevcut. Şimdi node_modules klasörünü silin ve ardından npm install komutunu çalıştırın. Bu durumda node_modules klasörünün projeye tekrar yüklendiğini göreceksiniz.

Projemize kurulu bir paketi silmek için npm uninstall <paket_ismi> demelisiniz. Örneğin npm uninstall slugify komutu ile bu paket hem node_modules den hemde packages.json dan silinir.

Npm ile Global Paket Yükleme

Npm ile local paket kurulumu projenin kullandığı paketlerdir. Bunun dışında projeye ait olmayan bilgisayarımızda kullandığımız tüm projelere hizmet edecek olan paketleri global olarak bilgisayarımıza kurabiliriz. Burada önemli olan projenizi yayınladığınızda projenin çalışması için gerekli olmayan sadece uygulama geliştirirken kullandığınız paketlerin global paket olarak yüklenmesidir. Örneğin slugify projenin çalışması anında da kullanılacak bir paket olduğundan dolayı projeye kurulması gereken bir pakettir. 

Örneğin scss kodlarımızı css kodlarına dönüştürecek olan ya da Typescript ile yazdığımız kodlarımızı Javascript ES5 söz dizimine çevirecek olan typescript paketi global olarak yüklenmelidir. Çünkü proje geliştirilip yayına alındığında bu paketlere artık ihtyaç duymayız.

Npm ile typescript ismindeki global paketi yüklemek için aşağıdaki komutu çalıştırınız.

npm install -g typescript 

Proje bu paketi kullanabilir ancak projenin bir parçası olmaz yani projedeki node_modules klasöründe yer almaz. Bu bilgisayarda geliştirilen tüm projeler bu pakete ulaşıp kullanabilir.

Bilgisayarımıza kurulu olan tüm global paketleri listelemek için npm list -g komutunu çalıştırınız.

Windows için npm list -g --depth 0 parametresini ekleyerek daha düzenli bir sonuç alabilirsiniz.

Npm ile global bir paketi bilgisayarımızdan silmek için npm uninstall -g <paket_ismi> komutunu çalıştırmalısınız.

Örneğin aşağıdaki komutlarla typescript kütüphanesini sileriz ve global paketleri listeleriz.

npm uninstall -g typescript
npm list -g

Dev Dependency

Bu aşamaya kadar yerel ve global paketleri npm ile nasıl kuracağımızı öğrendik şimdi ise, yerel ancak projeye global paketlerde olduğu gibi direk bir bağlılığı olmayan paketleri nasıl kurarız öğrenelim.

Global bir paket yüklediğimizde o bilgisayarda geliştirilen tüm projeler bu paketlere ulaşır ve kullanır. Ancak buradaki sorun projenizi bir başka bilgisayara taşıyıp geliştirme yapacağınızda da (henüz projeyi yayına almadık) aynı global paketleri diğer bilgisayara da kurup proje geliştirme aşamasında kullanmak istemeniz. 

Bu durumda global paketi bilgisayara kurmak yerine paketi projeye kuralım ancak projenin dependencies kısmında olup projeye bağımlı bir paket olmasın ve projeyi yayına aldığınızda yüklenmesi gerekmesin. Ancak hangi bilgisayara projemi taşırsam o bilgisayara global paketleri kurmam gerekmeden o bilgisayarda da projemi geliştirebileyim. 

Bir paketi projeye bağımlı olmadan yerel olarak kurmak için npm install <paket_ismi> --save-dev

Bu durumda paket projede şu şekilde yer alır.

"dependencies": {
  "slugify": "^1.6.5"
},
"devDependencies" : {
  "nodemon": "^2.0.20"
}

Nodemon kütüphanesi sayesinde projemizde yaptığımız her değişiklikten sonra projenin çalışmasını Ctrl + C durdurup node app.js ile projeyi tekrar çalıştımamız lazım. Ancak nodemon sayesinde buna gerek kalmadan dosyada yapılan her değişiklik otomatik algılanır ve proje tekrar çalıştırılır. Nodemon projemizde geliştirme yaparken kullandığımız bir araçtır. projeye bir bağımlılığı yoktur. Nodemon global olarak da bilgisayarımıza kurulabilir ya da bu şekilde projeye kurulabilir.