Node.js'e Bir Darbe Daha: Bun 1.2+ ile Gelen Dahili Postgres İstemcisi ve Bun Shell Devrimi

Node.js'e Bir Darbe Daha: Bun 1.2+ ile Gelen Dahili Postgres İstemcisi ve Bun Shell Devrimi
audio-thumbnail
Node.js'e Bir Darbe Daha: Bun 1.2+ ile Gelen Dahili Postgres İstemcisi ve Bun Shell Devrimi
0:00
/0

Node.js'e Bir Darbe Daha: Bun 1.2+ ile Gelen Dahili Postgres İstemcisi ve Bun Shell Devrimi

JavaScript ve TypeScript dünyası, son yılların en büyük hareketliliğini yaşıyor. Uzun süredir tahtını kimseye kaptırmayan Node.js, önce Deno'nun, ardından ise sahneye fırtına gibi giren Bun'ın baskısını üzerinde hissetmeye başladı.

Bun, sadece "hızlı bir JavaScript çalışma ortamı (runtime)" olma iddiasıyla yola çıkmıştı; ancak son yayınlanan Bun 1.2+ sürümüyle birlikte bu iddia, Node.js'i tahtından edebilecek devasa bir ekosistem devrimine dönüştü.

Bu yazımızda, Bun 1.2 ile gelen ve geliştirici deneyimini kökten değiştiren iki büyük gücü mercek altına alıyoruz: Bun Shell ve Dahili (Native) Postgres İstemcisi.


1. Bun Shell Devrimi: JS/TS İçinde Harici Araçsız Kabuk Betikleri

Geliştiriciler olarak sık sık dosya kopyalama, klasör oluşturma veya sistem komutlarını çalıştırma gibi operasyonel işler için kabuk (shell) betiklerine ihtiyaç duyarız. Node.js dünyasında bunu yapmak her zaman sancılı olmuştur. Ya karmaşık child_process veya spawn modülleriyle boğuşursunuz ya da zx, shelljs gibi harici npm paketlerine bağımlı kalırsınız.

Üstelik yazdığınız bu betikler genellikle işletim sistemine bağımlıdır; macOS'ta çalışan bir bash komutu, Windows kullanan ekip arkadaşınızda hata verir.

Bun Shell, tüm bu sorunları tarihe gömüyor.

Bun Shell Nedir ve Nasıl Çalışır?

Bun Shell, JavaScript ve TypeScript dosyalarınızın içinde doğrudan, güvenli ve platform bağımsız (cross-platform) kabuk komutları çalıştırmanızı sağlayan yerleşik bir motordur. Windows, macOS veya Linux fark etmeksizin aynı kod sorunsuz çalışır.

İşte basit bir örnek:

import { $ } from "bun";

// Basit bir klasör oluşturma ve dosya listeleme işlemi
await $`mkdir -p yeni-proje`;
const files = await $`ls -la`.text();

console.log("Klasör İçeriği:\n", files);

Bun Shell'i Benzersiz Kılan Özellikler:

  • Platform Bağımsızlık: Windows kullanan geliştiriciler için bash kurma zorunluluğu bitti. Bun Shell, yaygın Unix komutlarını (ls, rm, mkdir, echo vb.) kendi içinde simüle eder.
  • Güvenlik (SQL Injection Benzeri Saldırılara Karşı Koruma): Komut şablonlarına geçilen değişkenler otomatik olarak güvenli hale getirilir (escaped).
  • Performans: Harici bir terminal süreci (process) başlatmak yerine, doğrudan Bun'ın kendi optimize edilmiş motoru üzerinden çalıştığı için inanılmaz derecede hızlıdır.

2. Dahili Postgres İstemcisi: Sıfır Bağımlılık, Maksimum Performans

Node.js projelerinde PostgreSQL veritabanına bağlanmak için yıllardır pg, postgres veya sequelize/prisma gibi ORM/sürücü paketlerini projemize dahil ederiz. Bu durum hem node_modules klasörünün şişmesine neden olur hem de JS katmanındaki veri dönüştürme (parsing) süreçleri yüzünden performans kayıpları yaratır.

Bun 1.2+, bu sorunu kökten çözen dahili, yüksek performanslı bir Postgres istemcisi sunuyor.

import { SQL } from "bun";

// Ekstra hiçbir npm paketi kurmadan doğrudan bağlantı!
const sql = new SQL("postgres://username:password@localhost:5432/mydb");

// Güvenli ve hızlı sorgu çalıştırma
const users = await sql`SELECT id, name, email FROM users WHERE active = ${true}`;

console.log(users);

Neden Bu Kadar Büyük Bir Gelişme?

  1. İnanılmaz Hız (Native Binding): Bun'ın Postgres istemcisi, JavaScript ile yazılmış bir sürücü değildir. Doğrudan Zig ve C++ seviyesinde, veritabanı protokolünü en alt düzeyde işleyecek şekilde yazılmıştır. Bu sayede sorgu sonuçlarını JS nesnelerine dönüştürme hızı, standart Node.js sürücülerine kıyasla katbekat daha hızlıdır.
  2. Kutudan Çıktığı Gibi Güvenli (Auto-Escaping): Şablon dizileri (Template Literals) kullanarak yazdığınız sorgular, SQL Injection açıklarına karşı otomatik olarak parametreleştirilir.
  3. Sıfır Kurulum (Zero-Dependency): Projenizi başlatırken npm install pg yazmanıza gerek kalmaz. Docker üzerinde veya sunucuda çalıştırırken bağımlılık yönetimini sıfıra indirir.

Node.js vs. Bun 1.2+: Karşılaştırma Tablosu

Geliştirici deneyimi ve mimari açıdan iki çalışma ortamı arasındaki farkı şu şekilde özetleyebiliriz:

Özellik Node.js Bun 1.2+
Başlangıç Hızı Yavaş / Orta Milisaniyeler içinde (Ultra Hızlı)
TypeScript Desteği Harici araçlar gerekir (ts-node, tsx) Yerleşik (Doğrudan çalıştırır)
Paket Yöneticisi Harici (npm, pnpm, yarn) Yerleşik ve dünyanın en hızlısı
Kabuk Betikleri child_process veya harici kütüphaneler Bun Shell (Yerleşik & Cross-platform)
Postgres Desteği Harici paket bağımlılığı (pg) Dahili Postgres İstemcisi (Native & Hızlı)
Çevre Değişkenleri dotenv paketi gerekir Yerleşik (.env dosyalarını otomatik okur)

Bun'ın "Her Şey Dahil" (Batteries-Included) Felsefesi

Node.js, minimal bir çekirdek yapısına sahiptir ve neredeyse her şey için topluluk tarafından yazılmış paketlere güvenmeniz gerekir. Bu durum, zamanla "bağımlılık cehennemine" (dependency hell) ve devasa boyuttaki node_modules klasörlerine yol açar.

Bun ise "Her şey dahil" felsefesini benimsiyor. Bir web projesi geliştirmek için ihtiyacınız olan her şeyi tek bir binary (çalıştırılabilir dosya) içinde sunuyor: * Test koşucu (Test runner) * Paketleyici (Bundler) * Paket yöneticisi (Package manager) * WebSocket ve HTTP sunucusu * Ve şimdi de Bun Shell ile Postgres İstemcisi...

Bu durum sadece geliştirme sürecini hızlandırmakla kalmıyor, aynı zamanda CI/CD süreçlerindeki derleme (build) sürelerini de dakikalardan saniyelere indiriyor.


Sonuç: Node.js'i Bırakıp Bun'a Geçmeli miyiz?

Bun 1.2+ ile gelen yenilikler, Bun'ın artık sadece hobi projeleri veya küçük araçlar için değil, büyük ölçekli kurumsal backend projeleri için de rüştünü ispat ettiğini gösteriyor.

Eğer yeni bir projeye başlıyorsanız, harici hiçbir araca ihtiyaç duymadan TypeScript yazmak, doğrudan Postgres veritabanına en yüksek performansla bağlanmak ve karmaşık shell betiklerini tereyağından kıl çeker gibi çalıştırmak istiyorsanız Bun kesinlikle doğru tercih.

Siz de projelerinizde Bun kullanmayı denediniz mi? Özellikle Bun Shell ve dahili Postgres desteği hakkındaki düşünceleriniz neler? Yorumlarda bizimle paylaşın!