Node.js Nedir?
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
NodeJS, bir üst paragrafta da belirttiğim üzere JavaScript dili ile “Google Chrome’un v8 JavaScript Engine” kullanarak sunucu tarafında (server-side) ve ağ bağlantılı uygulamalar geliştirebilmemizi sağlayan bir ortamdır.
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 Kullanım Amaçları
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şturulabilmektedir1.
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ışı2 ve kaynak tasarrufu3 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 sitesi4 ü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 yeterli5:
brew install node
which node # => /usr/local/bin/node
~/.bashrc
ve/veya ~/.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 n6 ve nvm7 sürüm kontrol sistemleri kullanılabilmektedir. Daha detaylı bilgi için Downloading and installing Node.js and npm8 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
ya da ~/.bashrc
vb. 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/veya 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.
- About Node.js ↩
- How does Linkedin use Node.js? ↩
- YouTeam Editorial Team. (2019). Top Companies that Used Node.js in Production ↩
- NPM ↩
- How do I completely uninstall Node.js, and reinstall from beginning (Mac OS X). StackOverflow ↩
- tj/n. Node Version Management. GitHub ↩
- nvm-sh/nvm. Node Version Management. GitHub ↩
- Downloading and installing Node.js and npm. npm Docs ↩