```html
En heyecan verici son geliştirme araçlarından biri, geliştirici verimliliğini ve uygulama performansını artırmak için tasarlanmış, inanılmaz derecede hızlı, hepsi bir arada bir JavaScript araç takımı olan Bun'dır. Bun sadece başka bir çalışma zamanı değil; bir çalışma zamanı, paketleyici, test çalıştırıcısı, paket yöneticisi ve daha fazlasını tek bir yerel yürütülebilir dosya içinde birleştiren uyumlu bir ekosistemdir. Bu kılavuz, temel kavramlarına ve güçlü API'lerine odaklanarak, Bun'ın temel özelliklerini size tanıtacaktır.
Geliştirici Ekibinizin maksimum verimlilikle birlikte çalışması için entegre, Hepsi Bir Arada bir platform mu istiyorsunuz?
Apidog tüm taleplerinizi karşılıyor ve Postman'in yerini çok daha uygun bir fiyata alıyor!
Bun Nedir?

Temelinde, Bun yüksek performanslı bir JavaScript çalışma zamanı motoru üzerine kurulmuştur. Google'ın V8 motorunu kullanan Node.js'in aksine, Bun, Safari'ye güç veren Apple'ın JavaScriptCore (JSC) motorunu kullanır. Bu seçim, Bun'ın düşük seviyeli Zig programlama dilindeki uygulamasıyla birleştiğinde, dikkate değer hızına önemli ölçüde katkıda bulunur. Bun uygulamaları için başlangıç süreleri genellikle eşdeğer Node.js uygulamalarından önemli ölçüde daha hızlı, bazen dört veya daha fazla kat daha hızlı olarak ölçülür. Bu hız avantajı sadece başlangıçla sınırlı değildir; Bun'ın çeşitli API'lerinin dahili uygulamaları, maksimum verim ve minimum bellek kullanımı için optimize edilmiştir.
Ancak Bun'ın hedefi, sadece daha hızlı bir çalışma zamanı olmanın ötesine geçmektedir. Ortak geliştirici ihtiyaçlarını doğrudan ele alan kapsamlı bir araç takımı olmayı hedefliyor:
- Entegre Araçlar:
bun
komutunun kendisi, çok sayıda işlevsellik için giriş noktası olarak hareket eder.bun run
,package.json
içinde tanımlanan komut dosyalarını yürütür,bun install
bağımlılıkları yönetir (genellikle npm veya yarn'dan çok daha hızlıdır),bun test
Jest uyumlu bir API kullanarak testleri çalıştırır,bun build
kodu üretim için paketler vebunx
paketleri açıkça yüklemeden yürütür. Bu entegrasyon, gerekli farklı geliştirme araçlarının sayısını azaltarak iş akışlarını basitleştirir. - Yerel TypeScript ve JSX Desteği: Bun'ın öne çıkan özelliklerinden biri, TypeScript (
.ts
,.tsx
) ve JSX (.jsx
) dosyaları için kutudan çıktığı gibi destek sunmasıdır. Bun, bu dosya türlerini yürütme veya paketleme sırasında sorunsuz bir şekilde işleyen, yerleşik, yüksek oranda optimize edilmiş bir derleyici içerir. Bu, birçok yaygın geliştirme senaryosu içintsc
veya Babel içeren ayrı derleme adımlarına olan ihtiyacı ortadan kaldırır ve kurulum sürecini kolaylaştırır. - Modül Sistemi Uyumluluğu: Bun, ES Modülleri (ESM) için birinci sınıf destekle modern JavaScript'i benimser. Ancak, CommonJS (CJS) üzerine kurulu geniş mevcut ekosistemi tanır. Bun, her iki modül sistemi için de sağlam uyumluluk sağlar ve geliştiricilerin
import
verequire
'ı büyük ölçüde birbirinin yerine kullanabilmelerini ve npm'de bulunan milyonlarca mevcut CJS paketinden yararlanabilmelerini sağlar. - Web Standart API'lerine Uygunluk: Temel bir tasarım ilkesi, standart Web API'lerinin uygulanmasıdır.
fetch
,Request
,Response
,Headers
,WebSocket
ve Streams API (ReadableStream
,WritableStream
) gibi işlevler ve nesneler, Bun genel kapsamına yerleştirilmiştir. Bu, sunucu tarafı Bun ortamları, tarayıcı ön uçları ve kenar bilişim platformları arasında kod taşınabilirliğini teşvik ederek, geliştiricilerin farklı bağlamlarda tanıdık API'leri yeniden kullanmalarına olanak tanır. - Node.js Uyumluluğu: Optimize edilmiş API'ler ve Web standartlarıyla kendi yolunu çizerken, Bun, Node.js API yüzeyiyle yüksek derecede uyumluluk hedeflemektedir. Birçok yerleşik Node.js modülü (
node:fs
,node:path
,node:os
,node:events
, vb.) ve genel nesneler (process
,Buffer
,__filename
,__dirname
) kısmen veya tamamen uygulanmıştır. Amaç, birçok mevcut Node.js projesinin ve npm paketinin, Bun'da minimum veya hiç değişiklik yapmadan çalışmasına izin vererek, Bun'ı çok sayıda durumda potansiyel bir "yerine geçme" olarak konumlandırmaktır.
Bun, bu öğeleri birleştirerek, performans, basitlik ve modern bir geliştirme deneyimi arayan JavaScript ve TypeScript geliştiricileri için cazip bir alternatif sunmaktadır.

Bun Nasıl Yüklenir
Bun'a başlamak, çeşitli platformlarda hızlı ve kolay olacak şekilde tasarlanmıştır. macOS, Linux ve Windows Subsystem for Linux (WSL) için en yaygın yöntem, terminalinizde yürütülen basit bir curl
komutu kullanır:
curl -fsSL https://bun.sh/install | bash
Bu komut, bir yükleme komut dosyasını indirir ve doğrudan bash
'e yönlendirir. Komut dosyası, işletim sisteminizi ve mimarinizi algılamayı, uygun Bun yürütülebilir dosyasını indirmeyi ve genellikle ~/.bun/bin
'e yüklemeyi yönetir. Ayrıca, ~/.bun/bin
'i sisteminizin PATH
'ine eklemek için kabuğunuzun yapılandırma dosyasını (.zshrc
, .bashrc
veya .bash_profile
gibi) güncellemeye çalışır ve bun
komutunu genel olarak kullanılabilir hale getirir. Değişikliklerin hemen etkili olması için terminal oturumunuzu yeniden başlatmanız veya kabuk yapılandırma dosyanızı (örneğin, source ~/.zshrc
) manuel olarak kaynaklamanız gerekebilir.
İzin sorunlarıyla karşılaşırsanız veya doğrudan bash
'e yönlendirmek istemiyorsanız, önce komut dosyasını indirebilir ve çalıştırmadan önce inceleyebilirsiniz:
curl -fsSL https://bun.sh/install -o install.sh
# İstenirse install.sh'i inceleyin
bash install.sh
Diğer Yükleme Yöntemleri:
- NPM: Birincil olarak bağımsız bir araç olarak tasarlanmış olsa da, Node.js ve npm'nin zaten mevcut olduğu ortamlarda uygun olabilecek, Bun'ı npm aracılığıyla genel olarak da yükleyebilirsiniz:
npm install -g bun
- Docker: Resmi Bun Docker görüntüleri, Bun'ın önceden yüklü olduğu yalıtılmış ortamlar sağlayan Docker Hub'da mevcuttur. Bunlar, kapsayıcılı geliştirme ve dağıtım iş akışları için kullanışlıdır. Farklı temel işletim sistemi dağıtımlarına (Debian, Alpine gibi) dayalı çeşitli görüntüler ve belirli Bun sürümlerine karşılık gelen etiketler bulabilirsiniz.
docker run --rm --init --ulimit memlock=-1:-1 oven/bun:latest bun --version
- Windows: Bun için yerel Windows desteği hala deneysel olarak kabul edilmektedir ancak aktif olarak geliştirilmektedir. Şu anda Windows'ta Bun'ı kullanmanın önerilen yolu WSL aracılığıyladır. Ancak, doğrudan Windows derlemeleri kullanıma sunulmaktadır ve yükleme süreci, bir
.zip
arşivi indirmeyi ve yürütülebilir dosyanın konumunu manuel olarak sistemPATH
'ine eklemeyi içerebilir. Yerel Windows yüklemesi için en son durumu ve talimatları öğrenmek için resmi Bun belgelerine bakın. - Homebrew (macOS): macOS'ta Homebrew kullanıyorsanız, Bun'ı tap'i aracılığıyla yükleyebilirsiniz:
brew tap oven-sh/bun
brew install bun
Doğrulama:
Yüklendikten sonra, yeni bir terminal penceresi açın ve sürümü kontrol ederek yüklemeyi doğrulayın:
bun --version
Bu, yüklü sürüm numarasını çıkarmalı ve Bun'ın kullanıma hazır olduğunu doğrulamalıdır. Ayrıca, mevcut komutların ve seçeneklerin bir listesini görmek için bun --help
komutunu çalıştırabilirsiniz.
Bun'ınızı İlk Kez Çalıştırın
Bun ile basit bir program yazmaya ve çalıştırmaya dalalım. En yaygın görevlerden biri bir HTTP sunucusu oluşturmaktır. Bun, bu amaç için yerleşik, yüksek oranda optimize edilmiş bir API sağlar: Bun.serve
.
server.js
(veya Bun'ın her ikisini de işlediği gibi server.ts
) adlı yeni bir dosya oluşturun:
// server.ts
// Bun.serve, HTTP sunucusunu başlatır
const server = Bun.serve({
// Dinlenecek bağlantı noktasını belirtin.
// Varsayılan olarak process.env.PORT || 3000
port: 3000,
// 'fetch' işlevi, temel istek işleyicisidir.
// Standart bir Request nesnesi alır ve bir Response nesnesi (veya birine çözülen bir Promise) döndürmelidir.
fetch(request: Request): Response {
// Standart bir Web API Response nesnesi oluşturun
return new Response("Bun'a Hoş Geldiniz!");
},
});
// Sunucunun çalıştığını belirten bir mesajı günlüğe kaydedin
console.log(`http://localhost:${server.port} adresinde dinleniyor`);
Bu kod parçacığı aşağıdakileri yapar:
- Bun'da HTTP sunucuları oluşturmak için birincil işlev olan
Bun.serve
'ü çağırır. port
'u (bu durumda 3000) belirten bir yapılandırma nesnesi geçirir.- En önemli kısım
fetch
işlevidir. Bu işlev, gelen her HTTP isteği için çağrılır. Standart birRequest
nesnesi kabul ederek Service Worker getirme olayı işleyici kalıbıyla uyumludur. fetch
içinde, standart birResponse
nesnesi oluşturur ve döndürürüz. Burada, sadece düz metin "Bun'a Hoş Geldiniz!" döndürüyoruz.- Son olarak, sunucunun dinlediği gerçek bağlantı noktasını (
server.port
aracılığıyla erişilebilir) içeren bir onay mesajını konsola günlüğe kaydederiz.
Bu sunucuyu çalıştırmak için, dosyayı kaydettiğiniz dizinde terminalinizi açın ve şunu yürütün:
bun run server.ts
Veya, server.js
olarak kaydettiyseniz:
bun run server.js
Bun, komut dosyasını yürütecektir. TypeScript (server.ts
) kullandıysanız, Bun'ın dahili derleyicisi, yürütülmeden önce JavaScript'e dönüştürmeyi anında halledecektir. "http://localhost:3000 adresinde dinleniyor" mesajını göreceksiniz.
Şimdi, web tarayıcınızı açın ve http://localhost:3000
adresine gidin. "Bun'a Hoş Geldiniz!" metnini görmelisiniz.
Sunucuyu durdurmak için, terminalinize geri dönün ve Ctrl + C
tuşlarına basın.
Bu basit örnek, temel bir sunucuyu kurmanın ve (TypeScript dahil) kodu doğrudan Bun ile çalıştırmanın, entegre doğasını ve Request
ve Response
gibi Web Standart API'lerine olan bağımlılığını sergileyerek kolaylığını göstermektedir.
Bun'daki Yerel TypeScript Desteği Nedir
Bun'ın en önemli avantajlarından biri, özellikle zaten TypeScript kullanan veya benimsemek isteyen geliştiriciler için, birinci sınıf, kutudan çıktığı gibi destek sunmasıdır. TypeScript'i çalıştırmanın genellikle TypeScript derleyicisi (tsc
) kullanılarak önceden derlenmesini veya ts-node
veya tsx
gibi yükleyiciler/kayıt defterleri kullanmasını gerektiren Node.js'in aksine, Bun bunu yerel olarak ve şeffaf bir şekilde halleder.
Nasıl Çalışır:
Bun'dan bir .ts
veya .tsx
dosyasını (örneğin, bun run myscript.ts
) çalıştırmasını istediğinizde, otomatik olarak dahili derleyicisini çağırır. Bu derleyici, yerel kodda (Zig) yazılmıştır ve son derece hızlıdır. Görevi şunlardır:
- Türleri Kaldır: Standart JavaScript yürütmesinin bir parçası olmadıkları için TypeScript tür açıklamalarını, arabirimleri, numaralandırmaları vb. kaldırın.
- Sözdizimini Dönüştür: TypeScript'e özgü sözdizimini (belirli
enum
kullanımları veya yapılandırılmışsa eski dekoratör sözdizimi gibi) eşdeğer JavaScript'e dönüştürün. - JSX'i İşle: JSX sözdizimini (
.tsx
ve.jsx
dosyalarında kullanılır) standart JavaScript işlev çağrılarına (tipik olarakReact.createElement
veya yapılandırılmış bir JSX çalışma zamanı eşdeğeri) dönüştürün.
En önemli avantajı, bunun yürütme (bun run
) veya paketleme (bun build
) işlemi sırasında anında gerçekleşmesidir. Geliştirme sırasında TypeScript kodunuzu çalıştırmak için ayrı, açık bir derleme adımına gerek yoktur.
Örnek:
Bu TypeScript dosyasını (greet.ts
) düşünün:
// greet.ts
interface User {
name: string;
id: number;
}
function greetUser(user: User): void {
console.log(`Merhaba, ${user.name} (ID: ${user.id})!`);
}
const myUser: User = { name: "Bun Geliştiricisi", id: 123 };
greetUser(myUser);
// Bun'ın desteklediği modern özellikleri bile kullanabilirsiniz
const message = `Bun sürümü: ${Bun.version}`;
console.log(message);
Bunu doğrudan çalıştırabilirsiniz:
bun run greet.ts
Bun, bunu dahili olarak derleyecek ve ortaya çıkan JavaScript'i yürütecek ve şuna benzer bir çıktı üretecektir:
Merhaba, Bun Geliştiricisi (ID: 123)!
Bun sürümü: 1.x.y
JSX Desteği:
Benzer şekilde, JSX içeren bir .tsx
dosyanız varsa:
// component.tsx
// JSX yapılandırıldığını varsayarsak (Bun varsayılanları genellikle React ile çalışır)
function MyComponent({ name }: { name: string }) {
return <div className="greeting">Merhaba, {name}!</div>;
}
// NOT: Bunu doğrudan çalıştırmak HTML oluşturmaz,
// sadece derlenmiş JS yapısını gösterir.
// Genellikle bunu daha büyük bir uygulama veya çerçeve içinde kullanırsınız.
console.log("Bileşen oluşturmayı simüle etme (derlenmiş çıktı yapısı):");
// Gerçek çıktı, JSX dönüşüm ayarlarına bağlıdır,
// ancak JavaScript nesneleri/işlev çağrıları olacaktır.
bun run component.tsx
'i çalıştırmak, dosyayı yürütecek ve JSX'i JavaScript'e derleyecektir.
Yapılandırma (tsconfig.json
):
Bun, derleme işlemini etkileyen yapılandırma seçenekleri için tsconfig.json
dosyalarına saygı duyar. tsc
gibi tam tür denetimi yapmazken (Bun, yürütme ve derleme hızına odaklanır), tsconfig.json
'ı şunlar gibi ayarları anlamak için okur:
jsx
: ("react-jsx"
,"react"
, vb.) JSX'in nasıl dönüştürülmesi gerektiği.jsxImportSource
: JSX yardımcı işlevlerini içe aktarmak için modül (örneğin,"react"
).experimentalDecorators
,emitDecoratorMetadata
: Dekoratörler için destek.paths
,baseUrl
: Özel içe aktarma takma adları için modül yolu eşlemesi.target
,module
: Bun yürütmeyi yönetirken, bunlar bazen küçük derleme ayrıntılarını etkileyebilir.strict
,strictNullChecks
, vb.: Bunlar öncelikle tür denetimini etkiler (Bun'ınrun
sırasında yapmadığı), ancak bazı ilgili JavaScript yayma davranışları etkilenebilir.
tsconfig.json
bulunamazsa, Bun mantıklı varsayılan ayarları kullanır.
Bu sorunsuz entegrasyon, Bun ile TypeScript projelerine başlamayı inanılmaz derecede basit ve hızlı hale getirerek, giriş engelini düşürür ve geliştirme döngülerini hızlandırır.
Bun'a Özgü API'lerden Bahsedelim
Bun, Web Standart API'leri ve Node.js ile uyumluluğa büyük önem verirken, aynı zamanda genel Bun
nesnesi altında kendi optimize edilmiş, yerleşik API'lerini de sunar. Bu API'ler genellikle, Bun'ın yerel kod yeteneklerinden yararlanan ortak görevler için yüksek performanslı alternatifler veya kullanışlı sarmalayıcılar sağlar.
Bazı temel Bun.*
API'lerine bir bakış:
Bun.serve({...})
: Hızlı Başlangıç'ta görüldüğü gibi, bu, yüksek performanslı HTTP ve WebSocket sunucuları oluşturmanın temel taşıdır. Akıcı bir yapılandırma sunar ve standartfetch
işleyici imzasını kullanır. (Daha sonra ayrıntılı olarak ele alınacaktır).Bun.file(path)
: Disk üzerindeki bir dosyaya tembel bir referans olan birBunFile
nesnesi oluşturur. Dosya içeriklerini çeşitli biçimlerde (.text()
,.json()
,.arrayBuffer()
,.stream()
) yalnızca gerektiğinde okumak için yüksek oranda optimize edilmiş yöntemler sağlar. Bu genelliklenode:fs
eşdeğerlerinden çok daha hızlıdır.Bun.write(path, data)
:Bun.file
'ın karşılığı, verileri dosyalara verimli bir şekilde yazmak için kullanılır. Çeşitli veri türlerini (dizeler, Bloblar, Tamponlar, diğerBunFile
'lar) kabul eder ve varsayılan olarak atomik yazma işlemleri gerçekleştirir.Bun.build({...})
: esbuild API ile uyumlu olan Bun'ın yerleşik paketleyicisine programlı erişim sağlar. JavaScript/TypeScript'i tarayıcılar veya diğer çalışma zamanları için doğrudan Bun komut dosyalarından paketlemeye izin verir.Bun.spawn({...})
/Bun.spawnSync({...})
: Harici komutları, Node.js'inchild_process
'ine benzer şekilde alt süreçler olarak çalıştırın. Düşük yük için optimize edilmiş, eşzamansız akış API'leri ve daha basit bir eşzamanlı sürüm sunar.Bun.Transpiler({...})
: TypeScript/JSX'i tam paketleme olmadan JavaScript'e dönüştürmek için Bun'ın hızlı dahili derleyicisine doğrudan programlı erişim.Bun.password.hash(...)
/Bun.password.verify(...)
: Argon2id (önerilen) ve bcrypt gibi endüstri standardı algoritmaları kullanarak parolaları karma ve doğrulamak için güvenli ve kullanımı kolay işlevler. Harici kitaplıklara olan ihtiyacı ortadan kaldırır.Bun.env
:process.env
'e benzer şekilde, ortam değişkenlerine erişim sağlayan bir nesne, ancak bazı senaryolarda daha hızlı erişim sunabilir.Bun.version
: Şu anda çalışan Bun sürümünü içeren bir dize.Bun.revision
: Şu anda çalışan Bun derlemesinin Git taahhüt karmasını içeren bir dize.Bun.sleep(ms)
/Bun.sleepSync(ms)
: Belirtilen bir süre için yürütmeyi duraklatma işlevleri.Bun.gc()
: Çöp toplamayı manuel olarak tetikleyin (çoğunlukla hata ayıklama/karşılaştırma için, nadiren kullanın).Bun.resolveSync(specifier, parentPath)
/Bun.resolve(specifier, parentPath)
: Bir modülün mutlak yolunu bulmak için Node.js tarzı modül çözümlemesini programlı olarak gerçekleştirin.
Bu API'ler, Bun'ın ortak geliştirme görevleri için optimize edilmiş, yerleşik çözümler sağlama, harici bağımlılıklara olan bağımlılığı azaltma ve yerel çekirdeğinin hızından yararlanma çabasını temsil eder.
Bun'daki Web API'leri
Bun'daki temel bir tasarım seçimi, standart Web API'lerini uygulama konusundaki güçlü taahhüdüdür. Belirli bir görev için (özellikle ağ oluşturma ve veri işleme için) standart bir API mevcutsa, Bun, tescilli bir API icat etmek veya yalnızca Node.js sözleşmelerine güvenmek yerine, o standardı uygulamayı tercih eder.
Bu yaklaşım, çeşitli önemli avantajlar sunar:
- Kod Taşınabilirliği: Standart Web API'leri kullanılarak yazılan kod, daha az değişiklikle farklı JavaScript ortamlarında (tarayıcı, Node.js (giderek Web standartlarını da benimsemektedir), Deno, Cloudflare Workers ve Bun) yeniden kullanılabilir.
- Tanıdıklık: Zaten tarayıcı API'lerine aşina olan geliştiriciler, Bun ile çalışırken bu bilgiden yararlanabilir ve öğrenme eğrisini azaltabilir.
- Geleceğe Hazırlık: WHATWG ve W3C gibi kuruluşlar tarafından oluşturulan standartlara uyum sağlamak, genellikle uzun vadede daha istikrarlı ve yaygın olarak desteklenen API'lere yol açar.
- Performans: Bun'ın bu Web API'lerinin yerel uygulamaları, çalışma zamanı için yüksek oranda optimize edilmiştir.
Bun'da uygulanan temel Web Standart API'leri şunlardır:
Fetch API:
fetch()
: HTTP(S) istekleri yapmak için genel işlev.Request
: Bir HTTP isteğini temsil eder.Response
: Bir HTTP yanıtını temsil eder.Headers
: HTTP başlıklarını temsil eder.
URL API:
URL
: URL'leri ayrıştırmak ve işlemek için.URLSearchParams
: URL sorgu parametreleriyle çalışmak için.
Streams API:
ReadableStream
: Eşzamansız olarak okunabilen bir veri kaynağını temsil eder. İstek/yanıt gövdeleri, dosya okuma vb. için kullanılır.WritableStream
: Eşzamansız olarak yazılabilen bir veri hedefi temsil eder. İstek gövdeleri, dosya yazma vb. için kullanılır.TransformStream
: Verileri içinden geçerken dönüştüren bir çift yönlü akış (örneğin, sıkıştırma, kodlama).
Kodlama API'si:
TextEncoder
: DizeleriUint8Array
'e (tipik olarak UTF-8) kodlar.TextDecoder
:Uint8Array
'i dizelere kodlar.
Blob API:
Blob
: Genellikle dosya benzeri nesneler için kullanılan, değişmez ham verileri temsil eder.File
: Ad ve son değiştirilme tarihi gibi meta veriler dahil olmak üzere dosyaları temsil etmek içinBlob
'u genişletir. (GenellikleBun.file().slice()
veya form verilerinden oluşturulur).
FormData API:
FormData
: Genelliklefetch
isteklerinde form verilerini göndermek için kullanılan, anahtar/değer çiftlerinden oluşan kümeler oluşturmak için.
WebSocket API:
WebSocket
: WebSocket bağlantıları kurmak için istemci tarafı API'si. (Sunucu tarafı işlemeBun.serve
'e entegre edilmiştir).
Zamanlayıcılar:
setTimeout
,setInterval
,clearTimeout
,clearInterval
: Kod yürütmeyi zamanlamak için standart işlevler.
Konsol API'si:
console.log
,console.error
,console.warn
, vb.: Standart günlük kaydı işlevleri.
Kripto API'si:
crypto.subtle
: Düşük seviyeli kriptografik ilkelere (karma, imzalama, şifreleme) erişim sağlar.crypto.randomUUID()
: v4 UUID'leri oluşturur.crypto.getRandomValues()
: Kriptografik olarak güçlü rastgele sayılar oluşturur.
Performans API'si:
performance.now()
: Performans ölçümleri için yüksek çözünürlüklü zaman damgaları sağlar.
Bun, bu temel Web API'lerinin sağlam, performanslı uygulamalarını sağlayarak, web sunucuları, API'ler ve diğer ağ merkezli uygulamaları tanıdık, standartlaştırılmış arayüzler kullanarak oluşturmak için uygun, modern bir çalışma zamanı olarak konumlanmaktadır.
Bun HTTP Sunucusu, Açıklaması
Bun'da web sunucuları oluşturmanın birincil yolu, Bun.serve
API'sidir. Olağanüstü performans ve kullanım kolaylığı için tasarlanmıştır ve Request
, Response
ve fetch
gibi standart Web API'leriyle sorunsuz bir şekilde entegre olur.
Temel Kavramlar:
Bun.serve
işlevi, bir yapılandırma nesnesi alır ve bir Server
nesnesi döndürür. Yapılandırmanın en kritik kısmı fetch
işlevidir.
import { type Server } from "bun";
const server: Server = Bun.serve({
port: 8080, // Dinlenecek bağlantı noktası
hostname: "0.0.0.0", // Bağlanılacak ağ arabirimi (tümü için 0.0.0.0)
// fetch: Sunucunun kalbi - gelen istekleri işler
async fetch(req: Request, server: Server): Promise<Response> {
// req, standart bir Web API Request nesnesidir
// server, Server örneğinin kendisine bir referanstır
const url = new URL(req.url);
// Temel Yönlendirme Örneği
if (url.pathname === "/") {
return new Response("Ana Sayfa");
}
if (url.pathname === "/about") {
return new Response("Hakkımızda sayfası");
}
if (url.pathname === "/greet" && req.method === "GET") {
const name = url.searchParams.get("name") || "Dünya";
return new Response(`Merhaba, ${name}!`);
}
if (url.pathname === "/data" && req.method === "POST") {
try {
const data = await req.json(); // İstek gövdesini JSON olarak okuyun
console.log("Alınan veri:", data);
return new Response(JSON.stringify({ received: data }), {
headers: { 'Content-Type': 'application/json' }
});
} catch (e) {
return new Response("Geçersiz JSON gövdesi", { status: 400 });
}
}
// Varsayılan 404 Bulunamadı
return new Response("Sayfa Bulunamadı", { status: 404 });
},
// error: fetch işleyicisi *dışında* meydana gelen hatalar için isteğe bağlı işleyici
error(error: Error): Response | Promise<Response> {
console.error("[Sunucu Hatası]", error);
return new Response("Bir şeyler ters gitti!", { status: 500 });
},
// development: Yardımcı geliştirme hata sayfaları için true olarak ayarlayın (varsayılan: !process.env.NODE_ENV=production)
development: true,
// Gelişmiş kullanım durumları için 'websocket', 'tls' gibi diğer seçenekler mevcuttur
});
console.log(`Bun sunucusu http://${server.hostname}:${server.port} adresinde dinliyor`);
// Sunucu nesnesiyle etkileşim kurabilirsiniz:
// server.stop() // Sunucuyu durdurur
// server.reload({...}) // Sunucu yapılandırmasını dinamik olarak günceller (örneğin, getirme işleyicisi)
Temel Özellikler:
- Performans:
Bun.serve
, Zig'de yazılmış, Bun'ın özel, yüksek oranda optimize edilmiş HTTP sunucu uygulaması üzerine kurulmuştur. Birçok Node.js çerçevesine kıyasla düşük gecikme süresi ve kaynak tüketimi ile saniyede çok sayıda isteği işleyebilir. fetch
İşleyici: Standart(Request) => Response | Promise<Response>
imzasını kullanmak, temel mantığı Service Workers, Cloudflare Workers veya diğer modern web çerçeveleriyle çalışmış herkes için tanıdık hale getirir. StandartRequest
veResponse
nesnelerinin kullanımını teşvik eder.- Request Nesnesi:
req
parametresi, standartRequest
özelliklerine ve yöntemlerine erişim sağlar:req.url
,req.method
,req.headers
,req.json()
,req.text()
,req.arrayBuffer()
,req.formData()
,req.body
(birReadableStream
). - Response Nesnesi: Standart
Response
nesneleri oluşturur ve döndürürsünüz, bu da gövdeyi (dize, Tampon, Blob, Akış vb.), durum kodunu ve başlıkları kolayca ayarlamanıza olanak tanır. - Hata İşleme: İsteğe bağlı