Node.js Nedir?
Tags: node, javascript, npm, nvm
Published: 2022-09-07 11:50:43

## Giriş

[Node.js](https://nodejs.org/en/)'in ne olduğunu anlamadan önce, temel olarak bir web sitesi nasıl çalışır bilmek gerekir. Bir web sitesi,  herhangi bir sunucunun sabit diskindeki, bir klasörün içinde yer alan birkaç dosyadan ibarettir. Bu dosyaların sunucunun bildiği bir programlama dili ile yazılmış olması gerekir. Böylece sunucu bu dosyaların içindeki kodlari yorumlayarak bir çıktı üretir. Biz bu ciktiyi [HTTP](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol) protokolü sayesinde tarayıcımızda görürüz. Eğer herhangi bir web sitesinin herhangi bir sayfasının kaynak kodunu açarsanız, göreceğiniz bir sürü HTML etiketleri (tag) olacaktır. Tarayıcı bu etiketleri yorumlayarak ve başka teknolojilerden (örneğin [CSS](https://www.w3schools.com/css/) ve [Javascript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)) yararlanarak bize kullanışlı ve güzel web siteleri gösterir. 

## Node.js Nedir?

Aslında Node.js ye sunucumuzdaki javascript diye biliriz. Bu tanım çok eksik kalsa da bize bir fikir vermesi açısından yararlı olabilir. Peki Javascript normalde nerede çalışır? Tarayıcımızda. Web sayfalarının kullanıcının istekleri ile etkileşimli çalışması için javascript programlama dilini kullanırız. Node dan önce javascript i sunucumuzda çalıştırmamız neredeyse imkansızdı. Javascript tamamen tarayıcıya özgü bir programlama dilidir. Node ile birlikte bu değişti.  

Şu ana kadar sunucumuzda javascript çalıştırmak için Node.js’i kullanıyoruz demiştik fakat, bu işlemi yapan aslinda  node değildir. Node’un bünyesinde bulunan [V8](https://v8.dev/) ya da Chakra gibi javascript motorlarıdır. Node bunlarin koordinesini sağlar. 

Aslında Node javascript kodumuzun [V8  motoru](https://v8.dev/)  ile çalıştırılmasını sağlayan bir aracıdır.  V8 node’un varsayılan javascript motorudur.  Fakat tabiki Node’a başka JS motoru kullanmak istediğimizi söyleyip V8 yerine örneğin Chakra kullanabiliriz.

### Javascript kodumuzu sadece sunucuda calistirmaya yaramaz!

Node ayrıca pek çok asenkron API’yi bize sunarak kendi bilgisayarımızda bile bir takim zor sistemsel işleri kolaylıkla yapmamızı sağlar. 

## Neden Node?

Node bir takım yerleşik modüller (API’ler) vasıtası ile bazı zor görevleri oldukça performanslı yapmamızı sağlar demiştik. Bu ek modüller  Node’u geliştirme yapmak için kullanabileceğimiz harika bir araca dönüşür. Node’u güçlü kılan işte bu  sağladığı asenkron API’ler dir. Bu harici modüller çalıştığımız bilgisayar sistemlerinde ki iş parçacıkları ([Thread](https://en.wikipedia.org/wiki/Thread_(computing))) ile uğraşmadan bir takım görevler kolayca yapabilmemizi sağlar. Eğer bu varsayilan paketler bizim için yeterli değilse kendimiz de C++ programlama dili (Javascript’e de destek verir) ile API ler yazabiliriz. Node’un güçlü bir debug desteği de vardir. Node’u eşsiz kılan diğer bir özelliği de güçlü paket yönetim sistemidir. NPM (yani Node Package Manager) bize bir web sayfasını barındırmaktan (host) daha fazlasini saglayan diğer önemli bir faktördür. NPM bize tekrar kullanılabilen bedava kodlar sağlar. Açık kaynak kodlu çoğu proje ile kendi yapmamiz gereken bir takim işleri çok kısa sürede, bu iyi test edilmiş paketler sayesinde yapabiliriz. 

### CommonJS

Node’un diğer bir yararı da modül bağımlılık kontrolünü (module dependency manager) etkili bir şekilde sağlamamızda bize yardımcı olmasıdır. [CommonJS](https://nodejs.org/docs/latest/api/modules.html#modules-commonjs-modules) node ‘un module yönetim sisteminin adıdır. O olmadan kod yazmak neredeyse imkansız olurdu. Node dan önce javascript dünyasında modüllerin birbirine bağlanabileceği bir yapı yoktu. Node ile varsayılan olarak gelen CommonJs ile birlikte daha kolay anlaşılabilen ve okunabilen modüler kodlar yazabiliyoruz. 

### Asenkron Operasyonlar

Node beraberinde pek çok asenkron işi yapabilen API ler ile gelir. Bunların arasında sistemden dosya okumak ya da yazmak, ağdan (network) gelen bir takım verileri alip gereken şekilde işlemeyi sağlamak mesela sıkıştırıp şifrelemek gibi. Tüm bu işlemleri Node ile sistemin ana çalışan iş parçacığını (main thread)  bloklamadan yapabilirsiniz.  Bu konu web programlamada çok önemlidir. Çünkü tarayıcılar da bu tek thread prensibine göre çalışırlar.  Mesela bir web sayfasi tek bir iş parçacığını bloklarsa, o esnada kullanici tarayiciyi kullanamaz. Node ile geliştirme yaparken temelde dikkat etmemiz gereken en önemli kavram bu tek iş parçacıklı yapıdır. Eğer sunucumuzda ki kod asenkron değil de senkron olarak çalışırsa bu tüm sunucun o esnada kilitlendiği anlamina gelir ki diğer her şey bu operasyonun bitmesini beklemek zorundadır. 

## Node.js Kurulumu

### Basit Yöntem

En nihayetinde Node.js’de bir yazılımdır ve çalıştığı sisteme kurulması gerekmektedir. [Bu adrese giderseniz](https://nodejs.org/tr/download/) sizin karşınıza  iki seçenek çıkar:

* Uzun Süreli Destek (LTS)
* Güncel (Son Özelliller)

Buradan sisteminize uygun olan (Windows, macOs ya da Linux) yükleme dosyasını indirip sisteminize yükleyebilirsiniz. Peki bu iki seçenekten hangisini seçmek gerekir? Uzun süreli Destek ile bilgisayarınıza kuracağınız şey Node.js in kararlı bir versiyonudur. Çoğunlukla yazacağımız uygulamada kullanılan paketler bu versiyonlardan birini veya daha üstte yer alan versiyonlari desteklerler. Yani örneğin bir web sitesi yaziyorsunuz ve sitede bir resim düzenlemesi işi var. Bu işi yapan harici bir paketi NPM den indirip çalıştırmak istiyorsunuz. Burda bu paketin hangi versiyonu destekledigi çok önemli. Son özelliklerin paketin çalışmasında hataya neden oldugu bir kurulum yaptiysaniz eğer, kendi geliştirmeniz sırasında hata almaniz çok olasıdır. 

### NVM (Node Version Manager)

Başlangıc olarak basit yöntem ile sisteminize tek bir versiyon kurmanız mantıklı olandır. Fakat Node.js ile web sayfasi yapma maceranız ilerledikçe node un yeni versiyonlar çıkacaktır ve zaman içinde sisteminizdeki versiyonu güncellemeniz gerekecektir. İşte bu anda versiyonlar arasında geçiş yapmanız gerekecektir. Örneğin çalıştığım bir proje Node version 8 i desteklerken, modern geliştirme araçlarına ihtiyaç duyan başka bir uygulamada Node version 14 ü kullanmam gerekebilir. İşte bu nedenle profesyonel olarak node’u direk bilgisayarınıza kurmayın. Version yöneticisi (NVM) ile projenizin ihtiyac duydugu sürümü indirerek kullanın. NVM’i [bu adresten indirebilirsiniz.](https://github.com/nvm-sh/nvm)

## Sonuç

Node.js, bir web sayfası yapmamızı inanilmaz kolaylaştıran Chrome’un V8 JavaScript motoru üzerine inşa edilmiş harika bir çalışma ortamıdır. Bir an önce kurup harika uygulamalar yapabilirsiniz!

*Kaynaklar:*

* *<https://nodejs.org/tr/>*
* *<https://nodejs.dev/>*
* *<https://www.freecodecamp.org/news/before-you-bury-yourself-in-packages-learn-the-node-js-runtime-itself-f9031fbd8b69/>*
* *https://en.wikipedia.org/wiki/Node.js*