JavaScript

Node.js Nedir?

Yayın:
Web teknolojilerinin ihtiyaçlar ve performans gereksinimleri doğrultusunda çeşitlilik / zenginlik göstermesiyle birlikte geliştirme ve işlemleri ele alış biçimlerinde de önemli değişiklikler söz konusu olmaya başladı. ...
GÖRSEL
Web teknolojilerinin ihtiyaçlar ve performans gereksinimleri doğrultusunda çeşitlilik / zenginlik göstermesiyle birlikte geliştirme ve işlemleri ele alış biçimlerinde de önemli değişiklikler söz konusu olmaya başladı. Özellikle front-end geliştirmelerde önemli söz hakkı bulunan JavaScript’in server-side geliştirmelerde de kullanılmasıyla birlikte hayatımıza pek çok farklı noktadan yeni bir platform daha girmiş oldu; NodeJS (Node.js). Peki, nedir NodeJS ve web teknolojilerinde karşılaşılan ne tür problemlere nasıl bir çözümler üretmektedir?

Node.js Nedir?

NodeJS, bir üst paragrafta da belirttiğim üzere JavaScript dili ile server-side ve runtime environment uygulamalar geliştirebilmemizi sağlayan, “Google Chrome’un v8 JavaScript Engine” üzerinde çalışan bir platformdur.

Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.
JavaScript ve Google Chrome v8 JavaScript Engine ilişkili önemli. Bu sayede, server tarafında JavaScript kodları çalıştırılabilmekte. Google Chrome internet tarayıcısının da üzerinde çalıştığı C, C++ ve javaScript dilleri ile kodlanan v8 JavaScript Engine NodeJS yapısı ile JavaScript kodunu makine diline çevirmektedir.

2009 yılında, Joyent firması ile başlayan süreç şu anda milyonlarca geliştiricinin katkısıyla açık kaynak kodlu olarak sürdürülmekte.

Node.js İle Neler Yapılabilir?

NodeJS ölçeklenebilir, event-driven (olay güdümlü) asenkron (asynchronous event driven JavaScript runtime), non-blocking I/O çalışma modelini kullanır. Dolayısıyla yüksek bir performans sunmaktadır. Ayrıca, ISS, Apache gibi web server kurulumları yerine kolaylıkla web server oluşturulabilmektedir.

const http = require('http');
 
const hostname = '127.0.0.1';
const port = 3000;
 
const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});
 
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
Ek olarak real time (gerçek zamanlı) web uygulamaları web-socket teknolojisi ile performans öncelikli bir şekilde hazırlanabilmekte. Bu özellikler göz önünde bulundurulduğunda, NodeJS’in web uygulaması geliştirme sürecini oldukça etkili ve pratik bir hale getirdiğini söyleyebiliriz. Elbette, öncesinde NodeJS’in iş ele alış biçimine ve platformun gereksinimlerine aşinalık kazanmak gerekmekte. NodeJS’in sunduğu avantajları maddeler halinde derleyecek olursak;

  • JavaScript ile neredeyse tüm gereksinimleri karşılayabilme,
  • İş akışında, tek bir thread (iş parçacığı) ile bloklanmadan çalışabilme (thread sayısı arttıkça o kadar risk ve duruma göre performans gereksinimi söz konusu olabilir),
  • Eşzamansız (Asenkron / Async) mimari ile kolayca istekleri / iş akışını yönetebilme,
  • NPM (Node paket yöneticisi / package manager; ayrıca bkz. Yarn) ile bağımlılıkları (modül / paket) kolaylıkla yönetebilme.

İş ele alış biçimlerini NodeJS ile yeniden ele alan pek çok şirket / servis ciddi oranda performans artışı ve kaynak tasarrufu elde ettiklerini belirtmekteler.

Proje geliştirme sürecinde, bir web uygulaması için front-end JavaScript ile geliştirilmişse server-side tarafında da süreç JavaScript ile sürdürülebilir. Bu geliştiricilerin daha küçük bir ekiple daha kısa zamanda daha etkin bir süreç izleyebilmelerine olanak sağlayacaktır.

Node.js için kullanılabilir olan modüllere / paketlere ise NPM web sitesi üzerinden ulaşılabilir.

Node.js Kurulumu

8 Haziran 2019 itibariyle LTS (Long Term Support) versiyon: 10.16.0 (npm 6.9.0 ile birlikte). Güncel sürüm ise 12.4.0 (npm 6.9.0 ile birlikte).

NodeJS resmi paketlerini pek çok platform için hazırlanmış bir şekilde Node.js > Downloads sayfasında bulabilirsiniz. macOS üzerinden Homebrew paket yöneticisi ile Node.js indirme işlemi gerçekleştirmek için şu komutu kullanmanız yeterli:

brew install node
which node # => /usr/local/bin/node
~/.bashrc ve/ya ~/.zshrc dosyasında şu tanım yok ise eklemeliyiz eklemeliyiz:
export NODE_PATH='/usr/local/lib/node_modules'

Node Version Manager

Node.js ve NPM geliştirme süreçlerinde sürümler arasında farklılıklar gösterebilmektedir. Farklı sürümler üzerinde geliştirilen uygulamaların sağlıklı bir şekilde yönetilebilmesi amacıyla versiyon yönetim uygulamaları sunulmaktadır. Bu şekilde farklı Node.js ve NPM sürümleri arasında kolaylıkla geçiş yapılabilmektedir.

macOS ve Linux temelli işlerim sistemlerinde n ve nvm sürüm kontrol sistemleri kullanılabilmektedir. Daha detaylı bilgi için Downloading and installing Node.js and npm sayfasını inceleyebilirsiniz.

NVM kurulumuna bakalım. Aşağıda curl ve wget ile paketleri nasıl indirebileceğimizi görebilirsiniz.

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
#ya da
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Komutun uygulanmasının ardından shell script (*.sh) NVM reposunu ~/.nvm‘a ve command profile (~/.bash_profile, ~/.zshrc, ~/.profile, or ~/.bashrc) ekleyecek. Kurulumun ardından Node.js sürümlerini listeleyebilir, istediğiz sürümü seçebilir ve sürüm ilişkili işlemleri sorunsuz bir şekilde gerçekleştirebilirsiniz. Aşağıda örnek bir komut akışı iletiyorum:
nvm install v8.1.2
nvm list
nvm use v8.1.2
nvm uninstall v4.1.0

Node Uninstall

NVM kullanımında Node.js yapılandırmaları pratik bir şekilde gerçekleştirilmekte. NVM dışında ise bir dizi işlem gerçekleştirmek gerekmekte. Eğer brew paket yöneticisi ile indirme işlemi gerçekleştirmişseniz süreç biraz daha hızlı işleyecektir.
brew uninstall node #eğer yarn gibi bir bağımlılık var ise uyarı dönecektir. Öncesinde ilgili bağımlılığı silebilirsiniz ya da bir alt satırdaki komut ile uyarıları görmezden gelebilirsiniz.
#hataları es geçmek ve/ya tüm sürümleri kaldırmak için `brew uninstall --force node`
brew cleanup;
rm -f /usr/local/bin/npm /usr/local/lib/dtrace/node.d;
rm -rf ~/.npm;

Özetle

NodeJS ile kolaylıkla büyük ölçekli web projeleri / network uygulamaları hazırlayabilir, web servisleri ve web siteleri inşaa edebilirsiniz. NodeJS’i farklı bağlamlar çerçevesinde ele alacağım için bir başlangıç ve referans yazısına ihtiyaç vardı. NodeJS’e dair örneklerden ziyade NodeJS ile geliştiricilerin hayatına giren konular üzerinden devam edeceğim.

HABERDAR OL

Yeni eklenen projeler, eğitimler, içerikler ve yayınlanan videolar e-posta adresine gelsin.