Node Paket Yöneticisi (NPM) - Genel Bakış - Yazılım Mimarileri ve Tasarım Desenleri Üzerine

Node Paket Yöneticisi (NPM) – Genel Bakış

Merhaba,

Bu içeriğimizde Node.js için yazılmış olan paket yöneticisi üzerine(NPM) konuşuyor olacağız.

Paket Nedir?

Node.js’de herşey ufak parçalara ayrılmıştır ve bu ufak parçalar bir araya gelerek anlamlı bir bütünü ifade etmektedirler. İşte bu parçalara bizler “paket” bir diğer adıyla “modül” demekteyiz.

Örneğin; mail işlemleri, şifreleme işlemleri, dil işlemleri ve veritabanı işlemleri vs. için farklı paketler mevcuttur.

Herşey paket olarak tasarlandığından dolayı, herhangi bir pakette olan yeniliği kullanabilmek için komple Node.js’i güncellemek zorunda kalmaksızın direkt olarak ilgili paketi güncellememiz yeterli olmaktadır. Dolayısıyla paket bazlı sürüm güncellemesi, komple framework’ün yeni versiyonunu gerektirmediğinden dolayı Node.js’i oldukça etkili bir yapıya büründürmekte ve biz yazılımcılara oldukça hız ve zamandan olumlu maliyet kazandırmaktadır.

Eğer ki Node.js’de ki hali hazırda bulunan tüm paketleri görmek istiyorsanız www.npmjs.com adresini inceleyebilirsiniz.

Paket Yükleme

Node.js’de bir paketi yüklemek için aşağıdaki prototipte olduğu gibi bir komut vermeniz yeterli olacaktır.

npm install [paket adı]

Örnek olarak alasql paketini aşağıdaki gibi projemize yükleyebiliriz.
Node Paket Yöneticisi (NPM) - Paket Yükleme

Yerel ve Global Paketler

Birden çok organize projeler üzerinde çalışdığı durumlarda kimi modüller projeye özel kullanılırken kimisinde ise ortak kullanım sergilenmektedir. Eğer ki, bir paketi birden fazla projede ortak kullanacaksak her birine ayrı ayrı kurulum gerçekleştirmektense, ilgili paketi global olarak kurarak tek seferde net çözüm sağlayabiliriz.

Bu işlem için aşağıdaki prototipte çalışmamız yeterli olacaktır.

npm install -g [paket adı]

ya da

npm install -global [paket adı]

Örnek olarak bu sefer alasql modülünü global olarak aşağıdaki gibi kurabiliriz.
Node Paket Yöneticisi (NPM) - Global Paket Yükleme

Paketlerin Varsayılan Yüklenme Adresleri

Paketlerin varsayılan yüklenme adreslerini local ve global olmak üzere iki türlü görebiliriz.

  • Local paketler için;
    npm root
    
  • Global paketler için;
    npm root -g
    

    ya da

    npm root -global
    

Kurulu Paket Listesi

Kurulu paketlerin listelerinide local ve global olmak üzere iki türlü elde edebiliriz.

  • Local paketler için;

    npm list
    

    Bu şekilde alt modüllerde dahil hepsi listelenecektir. Eğer ki sadece ana modülleri listelemek istiyorsanız;

    npm list -depth=0
    

    şeklinde komutunuzu çalıştırmanız gerekmektedir.

  • Global paketler için;

    npm list -g
    

    ya da

    npm list -global
    

    Yukarıda değindiğimiz benzer mantıkta bu şekilde alt modüllerde dahil hepsi listelenecektir. Eğer ki sadece ana modülleri listelemek istiyorsanız;

    npm list -g --depth=0
    

    ya da

    npm list -global --depth=0
    

    şeklinde komutunuzu çalıştırmanız gerekmektedir.

Package.json Dosyası

Package.json dosyası, Node.js’de paket bağımlılık yönetimini sağlayabilmek adına oluşturulmuş bir JSON dosyasıdır. Kullanmak istediğimiz modülleri içerisine belirttikten sonra tek elden modül kurulumunu gerçekleştirebiliyoruz.

Package.json dosyasını oluşturabilmek için;

npm init

komutunun çalıştırılması gerekmektedir.

Bu komutu çalıştırdıktan sonra sistem tarafından peşi sıra aşağıdaki sorularla karşılaşılmaktadır;

  • package name
    Paket ismini belirtiniz.
  • version
    Versiyonu doğrulayınız.
  • description
    Açıklama belirtiniz.
  • entry point
    Projenin ana dosyasını/sınıfını belirtiniz..
  • test command
    Test sorgusu belirtiniz..
  • git repository
    Git kaynağı belirtiniz.
  • keywords
    Anahtar sözcük belirtiniz.
  • author
    Yazarı belirtiniz.
  • lisence
    Lisansı belirtiniz.

Bu bilgileri opsiyonel olarak belirttikten sonra package.json dosyası oluşturulacaktır. İçeriğine göz atarsak eğer aşağıdaki gibi json formatında bir veriyle karşılaşılmaktadır.

{
  "name": "ecmascript",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {
    "alasql": "^0.4.8"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Eğer ki yukarıdaki soruları es geçip direkt olarak dosyasının oluşturulmasını istiyorsanız komutu aşağıdaki gibi yazmanız yeterlidir.

npm init -y

Eğer ki projede package.json dosyası oluşturulmuş ise paket yüklemelerinde yüklenen paketlerin package.json dosyasına kaydedilmesi için aşağıdaki gibi komut yazılmalıdır.

npm install [paket adı] --save

Eğer ki, package.json dosyası içerisindeki “dependencies” alanında belirtilmiş paketleri projeye tek elden yüklemek istiyorsanız aşağıdaki komutu yazmanız yeterli olacaktır.

npm install

Bir Paketin Eski Versiyonunu Yükleme

Eğer ki yükleyeceğiniz paketin eski versiyonunu istiyorsanız aşağıdaki prototipte olduğu gibi komutunuzu yazmanız gerekmektedir.

npm install [paket adı]@[versiyon]

Örneğin;

npm install alasql@0.4.7

Yeni Versiyonu Olan Paketleri Listeleme

Local ya da global tüm paketlerin yeni versiyonlarını check ederek listeletebiliriz.

npm outdated

Paket Güncelleme

Bir paketi son çıkan versiyonu ile güncellemek için aşağıdaki gibi komut verilmesi gerekmektedir.

npm update [paket adı]

Eğer ki son versiyonu çıkan tüm paketleri güncellemek istiyorsanız;

npm update

komutunu çalıştırmanız yeterlidir.

Bağımlılık Yönetimi

Kimi paketler vardır ki, sadece geliştirme ortamında kullanılmaktadırlar lakin yayında(canlı ortam) kullanılmamaktadırlar. Bu paketlerden hangisinin canlı ortama taşınıp taşınmayacağını package.json dosyasındaki “dependencies” alanına ekli olup olmaması belirlemektedir.

npm install [paket adı] --save

şeklinde yüklenen bir paket direkt olarak “dependencies”e ekleneceğinden dolayı ilgili paket hem geliştirme ortamında hem de canlı ortamda kullanılacak manasına gelmektedir ve canlı ortamada taşınmaktadır.

Eğer ki bir paketi sadece geliştirme ortamında kullanmak istiyor ve canlı ortama taşımak istemiyorsak ilgili paketi “devDependencies” alanına eklememiz gerekmektedir. Bu işlem için;

npm install [paket adı] --save -dev

şeklinde komutumuzu yazmamız ilgili paketin “devDependencies” alanına eklenmesini sağlayacaktır.

Script Tanımlama

Elimizde aşağıdaki gibi bir script olduğunu varsayalım.

--- module.js ---
const merhaba = () => {
    console.log("Merhaba");
};

merhaba();

Bu scripti çalıştırmak için;

node module

şeklinde komutumuzu çalıştırmamız gerekmektedir.

Lakin ben bu şekilde script dosya adıyla çalışma yapmak istemiyorum diyorsanız package.json dosyasında bu scripti aşağıdaki gibi tanımlayabilir ve kullanabilirsiniz.

{
  "name": "ECMAScript",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {
    "alasql": "^0.4.8"
  },
  "devDependencies": {},
  "scripts": {
    "merhaba": "node module",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

Dikkat ederseniz “scripts” altında “merhaba” isimli bir değere “modul.js” scriptini çalıştıracak olan “node module” komutunu tanımlamış bulunmaktayız. Bu noktadan itibaren aşağıdaki gibi “merhaba” değeri üzerinden ilgili scripti çalıştırabilmekteyiz.

npm run merhaba

Node Paket Yöneticisi (NPM) - Script Tanımlama

Paket Kaldırma

Eğer ki bir paketi silmek istiyorsanız aşağıdaki kodu çalıştırabilirsiniz.

npm uninstall [paket adı]

Bu şekilde paket hem fiziksel olarak hem de package.json dosyasından silinecektir.

Eğer package.json dosyasından silinmesini istemiyorsanız;

npm uninstall [paket adı] --no -save

şeklinde kodunuzu yazmanız gerekmektedir.

Eğer ki global paketleri silecekseniz;

npm install -g [paket adı]

ya da

npm install -global [paket adı]

şeklinde kodu çalıştırmanız yeterli olacaktır.

Node paket yöneticisi(NPM) ile ilgili tüm konulara değinmeye gayret ettim. Umarım bol bilgili ve faydalı bir içerik sunmuşumdur.

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.