Paket ve paket yöneticiler ile başlayan yazı dizisinde, süreci biraz tersten ele alıp öncelikle Web geliştirme süreçlerinde kullanılan Yarn‘a değinmiştim.
Ceyhun Enki Aksan
09-12-2021 · javascript, nodejs
Kod örneği içerir
Sonraki
Web App: Manifest
09-12-2021 · afaik
Önceki
Gulp Nedir?
09-12-2021 · javascript
AA
Ardından, Node.js ile NPM’in de başlangıcını yapmaya çalıştım. Bu yazıda, Yarn’ın da temel olarak ele aldığı JavaScript paket yöneticisi olan NPM (Node Package Manager)’in ne olduğu ve ne tür özellikler barındırdığını özetlemeye çalışacağım.
NPM (Node Package Manager)
NPM (Node Package Manager / Node Packaged Modules), Isaac Z. Schlueter1 tarafından, tamamen JavaScript dili kullanılarak geliştirilen, temel olarak bir harici olarak sunulan yazılımların / paketlerin / modüllerin yönetimini sağlayan bir paket yöneticisi2.
NPM makes it easy for JavaScript developers to share and reuse code, and it makes it easy to update the code that you’re sharing
Paket ve bağımlılık yöneticiler çerçevesinde aslında temel özelliklere geniş bir bağlamda değinmiştim. Tekrar hatırlamak gerekirse;
Otomatik ya da el yordamı ile projelere paketleri dahil etme / yükleme
Edinilmiş paketleri silme
Kullanılan paketleri kayıt altında tutma (package.json vb.) ve listeleme
Kullanılan paketleri güncelleme
Unutmadan, genelde paket yöneticiler (elbette NPM de buna dahil) komut satırı aracılığıyla yönetilirler.
NPM Kurulumu
NPM kullanımı için öncelikle Node.js’in sistemde kurulu olması gerekmekte. Node.js başlıklı yazıda indirme bağlantısı ve ilgili temel bazı bilgileri paylaşmıştım. Node.js kurulumu ile birlikte kararlı NPM paketi de sistemde yer alacaktır. Bu kurulum (Node.js ve NPM’in birlikte edinilmesi) tavsiye edilen indirme biçimidir.
Kurulumları test etmek için şu komutlar aracılığıyla versiyon kontrolleri yapabilirsiniz:
node -v
npm -v
Package.json
Package.json yer aldığı projede kullanılan paketler / modüller ve bağımlılıklar (dependencies) hakkında bilgiler içeren bir yerel paket veritabanı (local package database)'dır. Bir projeye başlandığında el yordamı ile oluşturulabileceği gibi (uyulması gereken bir syntax vardır) NPM aracılığıyla init komutu kullanılarak da oluşturulabilir. Örnek olarak NPM ile oluşturma işlemini ele alalım.
npm init
Komut uygulanır uygulanmaz prompt aracılığıyla şu dönüş sağlanır:
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install ` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (example)
Gerekli bilgilerin doldurulmasının ardından, package.json dosyası içerisinde şu örnek içeriğe benzer şekilde yer bulur:
{
  "name": "example", // proje adı
  "version": "1.0.0", // proje versiyonu
  "description": "", // proje açıklaması
  "main": "index.js", // entry point yani ilk talimatların ve argümanların bulunduğu yer
  "scripts": { // paket ile ilişkili komut dosyası komutlarının yer aldığı yer
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "", // projenin yazarı
  "keyword": "", // projeyi tanımlayan anahtar kelimeler
  "license": "ISC" // projenin lisansı
}
Bu bilgiler bir metin editörü aracılığıyla istenilen zamanda düzenlenebilir. Ayrıca, bu tanımlarla uğraşmamak için -y flag ile komutu uygulayabilirsiniz.
npm init -y
NPM Paket Kurulumu
Node Package Manager (NPM) ile iki şekilde paketleri kurabiliriz; local ve global. Candidate mode olarak ifade edilebilecek kurulum yapısında;
Global, modülleri {prefix}/lib/node_modules, yürütme dosyalarını (executable files) {prefix}/bin, man dosyalarını {prefix}/share/man içerisine aktarır. {prefix} genellikle /usr/local dizinine karşılık gelir.
Lokal, modülleri çalışılan dizine (proje dizinine) kurar. Genellikle kurulum ./node_modules klasörü oluşturularak gerçekleştirilir. Yürütme dosyaları da yine bu klasör içerisinde ./node_modules/.bin/ içeriğinde tutulur. man dosyaları lokal kurulumda işleme alınmaz.
Kurulum Tercihi
Sadece proje bağlamında kullanılacak bir paketten söz ediyor ve require('...') şeklinde çağırıyorsak ilgili paket / modül kurulumunu lokal olarak gerçekleştirebiliriz.
Kurulum yapılacak paket / modül genel bir ihtiyacı karşılıyorsa ve sıklıkla kullanılacaksa kurulum global olarak gerekleştirilebilir.
Genellikle her iki şekilde de kurulum yapılması önerilir ya da global kurulum yapılıp sembolik (symbolic) link ile ilişkilendirme sağlanabilir. Örneğin, npm link coffee-script gibi. Daha detaylı bilgi için npm 1.0: Global vs Local installation3 sayfasına göz atabilirsiniz.
Öncelikle, ön tanımlı olarak kurulumun lokal olarak gerçekleştirileceğini belirtmeliyim. Şimdi örnek bir paket kurulumu gerçekleştirelim. Öncelikle newproject adında bir klasör oluşturalım ve package.json dosyamızı oluşturalım.
mkdir newproject
cd newproject
npm init -y
İndirme işlemini express.js için gerçekleştirelim.
npm install express
Komutun uygulanmasının ardından newproject dizininde node_modules klasörü oluşturulacak ve express paketi bu klasör içerisine yüklenecektir. Bu kurulumun ardından uygulamamız içerisinden pakete ../node_modules/express ile erişebiliriz. Şimdi, bu kurulum işlemini bir de global olarak yeniden ele alalım.
npm install express -g --save-dev
Bu kurulumun ardından newproject klasöründe node_modules alt klasörü oluşturulmayacaktır. Kurulum /usr/local/lib/node_modules/express yoluna sahiptir. Global kurulumu --save-dev ile ele aldığımızda ilgili tanımlama da dependencies olarak package.json dosyasına eklenecektir.
 "dependencies": {
    "express": "^4.17.1"
  }
dependencies, --save flag tanımlandığında paket bilgilerinin ekleneceği alandır. Bu paketler production için gereklidir. devDependencies ise --save-dev ile paketlerin detaylarının ekleneceği yerdir. Burada tutulan paketler geliştirme ve test için gereklidir. Dolayısıyla yukarıdaki install işlemini4 duruma göre tanımlayabilirsiniz. Projemize ilgili modülü / paketi şimdi de sembolik bağlantı ile entegre edelim.
npm link express
Bu durumda node_modules klasörü ve içeriğinde express sembolik bağlantısı oluşturulur.
/Users/user/Desktop/newproject/node_modules/express -> /usr/local/lib/node_modules/express
package.json dosyasına baktığınızda dependencies olarak express tanımının yapılmamış olduğunu görebilirsiniz. Bunun nedeni global yükleme işleminin haricen gerçekleştirilmesidir. El yordamı ile ilgili paket package.json dosyasına dahil edilebilir. Ya da sembolik bağlantının takip edilip otomatik bir şekilde eklenmesi için npm init -y komutunu yineleyebilirsiniz.
Diğer Paket İşlemleri
Install dışında kurulu paketleri nasıl listeleyebileceğimize, güncelleyebileceğimize ve proje dizininden kaldırabileceğimize bir bakalım.
npm list
Global modül kurulumlarında listelemede ilgili paketler UNMET DEPENDENCY uyarısıyla birlikte listelenirler. npm uninstall [paket-adi] ile bir paketi silebilir, npm update [paket-adi] ile belirtilen paketin güncellenmesini sağlayabiliriz. npm outdated ise package.json içeriğindeki paketlerin durumlarını listeler.
Package  Current  Wanted  Latest  Location
express   linked  4.17.1  4.17.1  newproject
Yukarıdaki komutları yine global olarak ele almak mümkün. Bu durumda, ilgili koda sadece -g eklemeniz yeterli olacaktır. Geliştirme ve/veya production aşamasında tanımlı paketleri yukarıdaki komutları uygularken --save ve --save-dev ile ayrı ayrı işleme alabiliriz.
Son Olarak
NPM, Node.JS için varsayılan paket yöneticisidir. Ancak, geliştiricilerin yaşadıkları sorunlar ve ihtiyaç duyulan ek özellikler sebebiyle süreç içerisinde farklı alternatifler de geliştirilmiştir. Örneğin yarn ve bower alternatif JavaScript paket yöneticileri olarak ifade edilebilirler. Fakat, [bowe projesi rafa kaldırılmış5, Yarn öne çıkan bir alternatif haline gelmiştir.
Aşağıda, ayrıca farklı kaynaklarca yayınlanmış NPM yazılarının bir listesini iletiyorum.
npm Documentation
A Beginner’s Guide to npm — the Node Package Manager
What is npm and How Can I Use It?
An Introduction to Node.js for Front-End Developers
Adım Adım NodeJS
Node.js NPM Paket Yöneticisi
isaacs. Twitter ↩
About npm. npm Docs ↩
Isaac Schlueter. (2011). npm 1.0: Global vs Local installation ↩
npm-install. npm Docs ↩
Adam Stankiewicz. (2017). How to migrate away from Bower? ↩
Etiketler: bower, node package manager, node.js, node.js paket yöneticisi, npm, npm install, yarn, code
Yorum alanını göster
Beğendim
Beğenmedim
Yayıncı Desteği
Kahve Ismarla Bağış Yap
Destekleyenler
İletişim
Bu yazı ile ilgili
ne yapmak
sohbet et
mesaj gönder
destek al
istersin?
Adres
Merkez Mah. Hasat Sk. No:52 D:1, 34381, Şişli / İstanbul, Türkiye
Şişli V.D. 0340269965
Eğitimler
GTAG Kullanımı
Ads Hesap Oluşturma, Dönüşüm ve Yeniden Pazarlama İşlemleri
GA Kurulumu ve İlk Yapılandırma
GTM Kurulum ve Temel İşlemler
Sayfalar
Anasayfa
İçerikler
Servisler
Ürünler
Eğitimler
Bağlantılar
GitLab
Patreon
Twitter
SuperPeer
Instagram
Destek Talebi Ücretli Danışmanlık
İletişim Soru, öneri, vb.
Skype 15 dk. kısa görüşme
CEA v.3.0 "HD 189733 b"Grav CMS, Twig, Markdown Extra, Spectre CSS ve IonIcons
ceaksan.com alan adı altında yer alan tüm içerikler aksi açık bir şekilde belirtilmediği sürece CC BY-NC-SA 4.0 lisansı ile lisanslıdır. Bu lisans kapsamında, ilgili içerik ticari olmamak koşulu ile uyarlanabilir veya alıntılanabilir. Ancak, hiçbir cümle alıntı olduğu belirtilmeksizin kısmen veya tamamen farklı bir içerik içerisinde olduğu gibi kullanılamaz.