NodeJS Ad?m 6 – Npm paket yneticisi

Ad?m Ad?m Nodejs yaz? dizimizinbir nceki blmnde modl olu?turmay? ve bunlar? kullanmay? ?rendik.

Amac?m?z srekli ayn? kodlar? yazmamak ve tekrar kullan?labilir program paralar? retmekti. Peki yazd???m?z bu modlleri ba?kalar?n?n kullanmas?n? sa?layabilir miyiz? Yada ba?kalar?n?n yazd??? modlleri biz kullanabilir miyiz? Yada kulland?k diyelim. Daha sonra bu modln sahibi paketi gncelledi?inde kolayca gncelleyebilir miyiz? (Bu arada paketi modln paketlenmi? kullan?ma haz?r hali gibi d?nebilirsiniz. Asl?nda ayn? ?eyler.)

Tabiki. Bunu npm yani node package manager ile ok kolay bir ?ekilde yapabiliriz. npm nodejsi ykledi?imizde yklenen bir ara. npm ile olu?turmu? oldu?umuz modlleri ba?kalar?n?n kullanmas? iin yay?nlayabiliriz. npm resmi olarak https://www.npmjs.com adresini kullan?r. Yay?nlam?? oldu?umuz paketlere herkes bu adresten eri?ebilir. Yine npm ile herkesin a?k olarak yay?nlad??? paketlere bizde buradan ula?abiliriz. Ben bu yaz?y? yazarken toplam paket say?s? 330338 adet idi. Paket yay?nlamaya ok girmeyece?im. Gerekli dokmantasyona buradan ula?abilirsiniz.

npm ile Paket Ykleme

npm tamamen konsol zerinden kullan?lan bir ara. npm ile tm i?lerimizi konsol komutlar? ile yapaca??z. Paket yklemek iin kullanaca??m?z komut ise ?u ?ekilde: npm install paketadi. Bu komut ile npm zerindeki btn paketlere ula?abiliriz. Tabi bu paketlerin ne i?e yarad?klar? ve nas?l kullan?ld?klar?n? paketlerin dkmantasyonundan ?renece?iz. rnek olarak lodash paketini ykleyelim. Bunun iin konsol ekran?na npm install lodashyazmam?z yeterli. Bu komut npmnin deposundan lodash paketini bizim iin indirecektir. Peki ama nereye ykleyecek? npm ile ykledi?imiz paketler bulundu?umuz klasr ierisindeki node_modules ad?ndaki bir klasre yklenir.(Klasr yoksa olu?turulur.) Bu paketleri kod ierisinde nodejsin var olan paketleri gibi kullanabiliriz. rne?in lodash paketini kullanmak iin var ldsh=require(“lodash”);yazmam?z yeterli. Nodejs bu paketi node_modules klasr ierinde bulup ldsh de?i?kenine atacakt?r. Lodash ierisinde btn nesne ve fonksiyonlar?da ldsh de?i?keni ile eri?ebilir.

6-1-node-npm

?lk paketimizi yklemi? olduk. Asl?nda npm ile sadece nodejs paketleri yklemiyoruz.Nodejs paketleri d???nda css paketleri, javascript paketleri(n yz geli?tirme iin) gibi paketlerde ykleyebiliriz. Mesela bootstrap css frameworkn npm ile ykleyebiliriz. Bunun iin ?u komutu vermemiz yeterli npm install bootstrap. Ayn? ?ekilde jquery javascript ktphanesini yklemek istiyorsak ?u komutu vermemiz yeterlidir: npm install jquery. npmnin bir di?er yetene?i de yklemek istedi?imiz paketlerin istedi?imiz versiyonunu ykleyebiliyor olmam?z. Mesela jquerynin 1.11.2 versiyonunu yklemek istiyorsak ?u komut bizim iin yeterli olacakt?r: npm install jquery@1.11.2.Gemi? versiyonlar gibi alfa veya beta versiyonlar iinde ykleme yapabiliriz. Btn bu versiyonlar tabiki paket sahibi taraf?ndan belirleniyor. Ykleyece?imiz paketin al??mas? iin ba?ka bir paket yklenmesi gerekiyorsa npm bizim iin onlar? da yklyor. Mesela jquery validationpaketinin al??mas? iin jquery paketininde yklenmesi gerekiyor. Siz npm install jquery-validation komutunu al??t?rd???n?zdanpm jquery validation paketiyleberaber jquery paketini zaten yklemi? oluyor.

package.json Dosyas? ve Maharetleri

Peki bizim projemiz iin toplam paket say?s? 50yi geti diyelim. O zaman bizim projemizin boyutu ok ykselece?i iin ta??nabilirli?i d?ecektir. Projeyi i? arkada??m?za verece?iz diyelim. 50 paketin hepsiyle beraber kopyalay?p verece?iz. Yada diyelimki kodlar?m?z? versiyon kontrol sistemine yklyoruz. Ve srekli versiyonlama yap?yoruz. Ykleme ve versiyonlaman?n tamam? 50 paket ile birlikte olacak. Buda ok zaman alacakt?r. Bu i?in kolay bir yolu yok mu? Tabiki var. package.json dosyas?.

package.json dosyas? projemizin ana dizininde bulunan ve projemiz hakk?nda bilgiler ieren, projemiz ierisinde kullan?lan paketlerin listesini tutan, projemiz iin konsolda kullan?labilecek komutlar iin k?sa yollar eklenebilen ve daha fazlas?n? ieren zel bir json dosyas?d?r. rnek bir package.json dosyas? ?u ?ekildedir:

{
  "name": "proje_adi",
  "version": "1.0.0",
  "keywords": [
    "nodejs",
    "npm",
    "ders",
    "ornek"
  ],
  "description": "proje a?klamas?",
  "main": "program.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Emre KAAN",
  "license": "MIT",
  "dependencies": {
    "bootstrap": "^3.3.7",
    "jquery-ui": "^1.12.0",
    "lodash": "^4.15.0"
  }
}

Dosyam?z?n ieri?ine bakacak olursak name alan? projemizin ad?, version alan? projemizin ?uan hangi versiyonda oldu?u, keywords alan? projemiz hakk?ndaki anahtar kelimeleri, description alan? projemiz hakk?nda a?klama, main alan? projemizi al??t?rmaya hangi dosyadan ba?lanaca??n?, scripts projemiz iin konsolda al??t?rabilece?imiz komutlar?n k?saltmalar?, author alan? proje yazar?/sahibi, license proje lisans? ve son olarak da dependencies projemizin ba??ml?l?klar? yani projemizde kulland???m?z paketlerin listesi hakk?nda bilgi verir.

Projemizin ana dizinine bir dosya olu?turup ad?na package uzant?s?na da .json vererek bu dosyay? olu?turabiliriz. ?eri?ini yukardaki gibi kendimiz yazabiliriz. Ama bunun daha kolay bir yolu var. konsoldan ?u komutu vermemiz yeterli npm init . Bu komutu verdi?imizde bize birka soru sorulacak ve sorular bitti?inde dosya kendisi olu?acak. Daha nceden yklemi? oldu?unuz paketler varsa onlar?da dependecies yani ba??ml?l?klar yani paket listesine ekleyecektir. Soru sorular?n hepsine cevap vermek zorunda de?ilsiniz. Hibirine cevap vermeyip sadece paketleri alg?lamas?n? sa?layabilirisiniz.

6-2-node-npm

Dosyam?z? olu?turuk. Bu dosya projemiz hakk?nda bir ok bilgi bar?nd?r?yor. En nemliside paket listesi. Art?k projemizi ta??rken node_modules klasrn silebiliriz. Yada projemizi versiyon kontrol sistemlerine atarken node_modules klasrn hari tutabiliriz(exclude). Peki ama projeyi alan ba?ka bir ki?i paketleri tekrar nas?l ykleyecek? ok basit ?u komutla: npm install . Biz bu komutu konsola yazd???m?zda npm package.json dosyas?na bakacak ve ierisindeki paketleri ykleyecek. zellikle github zerinden indirdi?iniz veya checkout yapt???n?z projelerin o?unda projeyi al??t?rmadan nce bu komutu vermeniz gerekir.

package.json ierisindeki scripts k?sm? iin projemiz iin konsolda kullanaca??m?z komutlar?n listesini tutabiliriz demi?tik. Mesela program?m?z? konsolda al??t?rmak iin node program.js komutunu veriyorduk. Bunu package.json ierindeki script k?sm?na ekleyelim.

 

{
  ...
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node program.js"
  },
  ...
}

Art?k projemizi npm ile ba?latabiliriz. Konsola ?u komutu vermemiz yeterli :npm start

Bir scripte birden fazla komutta yazabiliriz. package.json dosyam?z? ?u ?ekilde de?i?tirelim:

 

{
  ...
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "npm install && node program.js"
  },
  ...
}

Konsola tekrar npm startyazd???m?zda npm nce npm installkomutunu al??t?r?p paketleri ykleyecek, daha sonra node program.jskomutunu al??t?r?p program? al??t?racak.

npm ile ilgili syleyeceklerimiz bu kadar de?il ama ilk a?ama iin bu kadar yeterli san?r?m. Gerisini ke?fetmek size kalm??.

npm ile Global Paketler ve Kk Aralar

npm ile paket yklemek bu kadar kolayken bu kolayl??? ba?ka yerlerde kullanmamak olmazd?. npm ile konsolda kullanabilece?imiz kk aralarda ykleyebiliriz. Mesela resimlerinizi yeniden boyutland?ran bir konsol arac? d?nn. Siz arac?n ad?n? yaz?yorsunuz, resmin ad?n? yaz?yorsunuz, boyutu yaz?yorsunuz ve o ara sizin iin o resmin boyutunu bytyor veya kltyor. Byk kolayl?k. Tek sat?r komut ile i?imizi halletmi? oluyoruz. Bunun iin npm bize yeter. Ama npm ykledi?i paketleri node_modules klasrne at?yordu. Oradaki bir ara nas?l olacakta konsolda al???r hale gelecek? Tabiki oraya yklemeyerek. npm ile istedi?imiz paketleri global olarak ykleyebilir. Mesela yukar?da bahsetti?im rnek iin paketimizin ad? resize-img-cli. resize-img-cli paketini global olarak yklemek iin konsola ?u komutu vermemiz yeterli: npm install –global resize-img-cli. Yada npm install -g resize-img-cli. ?ki komutta ayn?. Bu komut ile resize-img-clipaketini bilgisayar?m?zda bulunan global npm deposuna yklyor. Ve biz resize-img-cli paketini konsol zerinden istedi?imiz gibi kullanabiliyoruz. Mesela resize-img-cli ile bir resmin boyutunu de?i?tirmek iin resize-img-cli resim1.jpg –width 200 > resim2.jpgkomutunu al??t?rmam?z yeterlidir. Bu komut npmnin global deposundaki resize-img-cli arac?n? al??t?racak ve parametre olarak verdi?imiz resim1.jpg dosyas?n? alacak ve boyutunu de?i?tirip resim2.jpg ad?nda yeniden kaydedecek. (Bu arac? kullanmay? tabiki dokmantasyonundan ?reniyoruz.) Bu kadar.

6-3-npm

Paket yklemeyi ve global paketlerle kk aralar kullanmay? bu kadar kolayla?t?rd??? iin npmnin ?uan yzbinlerce paketi var. Ve ok popler olarak kullan?lmakta. ?nsanlar nodejs kullanmasa bile npmyi bir ?ekilde kullan?yorlar. nk npm aralar? sadece nodejs de?il nodejs d???nda birok i?e yar?yor. Birka rnek vermek gerekirse yeoman paketi ile proje taslaklar? olu?turabilirsiniz, gulp paketi ile projenizde yapt???n?z srekli grevleri otomatize edebilir, less paketi ile .less dosyalar?n?z? derleyebilirsiniz gibi daha birok kk aralar i?leriniz kolayca halledebilirsiniz.

npm ile anlat?labilecekler tabiki bu kadar de?il. Ama bunlar san?r?m yeterli olacakt?r. Daha fazla bilgi ve paket iin npmjs.com adresine bakabilirsiniz.

Bir sonrakiblmde nodejse geri dnp httpClient ile web sitelerine ve servislerine ba?lanmay? ve olaylar? anlataca??m.

Makalede kullan?lan kodlara buradan ula?abilirsiniz.


[jetpack_subscription_form]