- Bun 1.0, JavaScript ve TypeScript’i çalıştırma, derleme, test etme ve hata ayıklama işlemlerini tek bir araçta ele alır; kararlı ve üretime hazır durumdadır
- Node.js alternatifi olmayı hedefleyerek
fs,path,net,__dirname,process,node_modulesçözümleme gibi Node API’lerini ve modül çözümlemeyi destekler; Express, Koa, Hono ve Next.js, Remix, Nuxt, Astro, SvelteKit, Nest, SolidStart, Vite tabanlı uygulamalar Bun üzerinde çalışır - Windows için native build ilk kez sunuluyor ancak son derece deneysel; şu anda yalnızca JavaScript runtime destekleniyor, paket yöneticisi, test runner ve bundler devre dışı
- Bun 0.8’den sonraki değişikliklerle Next.js, Astro, Nest.js desteği eklendi; desteği sonlandırılmış
bun devkomutu kaldırıldı ve artıkpackage.jsoniçindeki"dev"script’ini çalıştırıyor - Yeni desteklenen Node.js API’leri olarak
child_process.fork()ve IPC,fs.cp(),fs.cpSync(),fs.watchFile(),fs.unwatchFile(),node:httpiçin Unix socket eklendi - Runtime’a yerleşik bir JavaScript transpiler dahildir;
.js,.ts,.cjs,.mjs,.jsx,.tsxdosyaları ek bağımlılık olmadan çalıştırılabilir - ESM ve CommonJS’i aynı anda destekler; dosya uzantısı veya
package.jsoniçindeki"type": "module"ayarı olmadan aynı dosyadaimportverequire()kullanılabilir fetch,Request,Response,WebSocket,ReadableStreamgibi Web standardı API’ler yerleşik gelir;node-fetchvewsgibi paketler olmadan kullanılabilir--hotseçeneğiyle hot reload kullanılabilir;Bun.serve()de hot reload kapsamına girer- Bun API’leri olarak
Bun.file(),Bun.write(),Bun.serve(),bun:sqlite,Bun.passwordsunulur; dosya G/Ç, HTTP/WebSocket sunucusu, SQLite, bcrypt ve argon2 parola hash’leme ve doğrulama işlemlerini yapar - Paket yöneticisi
bun install,bun add,bun remove,bun updatekomutlarını sunar;package.jsonokuyupnode_modulesiçine yazan npm uyumlu bir yaklaşımdır - Test runner
bun:test, Jest uyumlu API sunar;@jest/globalsvevitestimport’larını içeridebun:testolarak yeniden eşler - Bundler, JavaScript ve TypeScript bundle etme ve minify desteği sunar; esbuild uyumlu plugin API’si ve bundle sırasında JavaScript fonksiyonlarını çalıştırıp değerleri inline eden JavaScript macros sağlar
1 yorum
Hacker News yorumları
Bun geliştirmesine katkıda bulunuyorum. Sorularınız varsa yanıtlayabilirim.
Moderatörün bağlantıyı blog yazısıyla değiştirmesi iyi olurdu. Çünkü açıklaması GitHub sürüm sayfasından daha iyi.
Blog yazısı: https://bun.sh/blog/bun-v1.0
Aynı dosyada
importverequire()kullanabilmek,.js/.cjs/.mjsya da"type": "module"ile uğraşmak zorunda kalmamak en etkileyici yanı.Bu olmazsa Node.js ekosistemi neredeyse tamamen bozuk sayılır; Bun da bunu kurtarabilecek gibi görünüyor. Bence Bun’daki en müthiş şey performanstan çok Jarred’ın istikrarlı biçimde yaptığı pratik ve geliştirici dostu tercihler.
Sadece farklı bir ödünleşim seçti; bunun sonucunda da başka bir paket kümesinin çalışmama ihtimali yüksek. Bun’ın, diğer araçların çözemediği bir sırrı çözdüğünü düşünmek için bir dayanak olup olmadığını merak ediyorum.
Bana göre doğru yöntem bu. Node’un bölünmüş ekosistemi dile ve runtime’ın tamamına büyük zarar verdi.
importilerequireyüzünden saatlerce uğraştım.React uygulaması ya da hazır çözümler kullanmıyorsanız modern JS ekosistemi gerçekten acı verici; küçük kütüphane geliştiren biri için özellikle öyle. Yeni başlayanlar için bunun ne kadar zor ve çıldırtıcı olduğunu hayal bile edemiyorum.
Bun’ın bu sorunu çözmesi tek başına denemek için yeterli bir neden. Bir başka JS runtime’ı ya da build aracına karşı böyle bir heyecan duyacağımı hiç düşünmezdim; Bun ekibi sayesinde günlerimin biraz daha aklı başında geçebileceğini umuyorum.
bundlerçözümleme stratejisi çıktıktan sonra son 6 ay genel olarak fena değildi.Çok nadiren sorun yaşadım ama projeler düzeltene kadar
pnpm patchve meta düzeltmeleriyle etrafından dolaştım. 2023’e modüllerin yılı denebilir; sular gayet iyi.type: moduleve.js/.cjs/.mjs/.tsarasında yolumu bulmaya çalışırken hissettiğim kadar aptal hissettiğim başka bir an yok.Production uygulamalarında elbette ne kullandığınız net olmalı; ama prototiplemede Bun’ın hoşgörülü davranışı sayesinde önce kodu yazıp gerisini sonra düşünebiliyorsunuz.
node:tamamını uygulamamış bir 1.0 sürümü için drop-in replacement ifadesinden daha iyi bir ifade kullanılamaz mı diye düşünüyorum.İlk denediğim iki projenin drop-in replacement olmaması büyük hayal kırıklığı yarattı ve artık Bun’ın tüm iletişimine şüpheyle bakıyorum.
Bağlam olarak, iki proje de
dgramgerektirenosckullanıyor. 9 ay önce açılmış özellik isteği takip biletini buldum ama uygulama planı yoktu; bu duyuru sayfasındadgramdiye aratınca da hiçbir şey çıkmıyor.Hızlı bir öneri olarak, Bun 1.0’da desteklenmeyen modüllerin açıkça belirtilip Node.js uyumluluğu bölümüne konması iyi olurdu.
Düzenleme: Node destek dokümanını buldum — https://bun.sh/docs/runtime/nodejs-apis . Sürüm notlarında bağlantı verilmesi iyi olurdu.
Kabaca bakınca modül bazında 17 uygulanmış, 17 kısmen uygulanmış, 7 uygulanmamış gibi görünüyor.
1.0.0yerine1.0.0-beta’ya daha yakın görünüyor.Az önce v1.0.0’ı kurup
bun replçalıştırdım; çıkış kodu 1 ile başarısız oldu. Meğer REPL 3000 portunu kullanmaya çalışıyormuş ve benim ortamımda bu port zaten kullanılıyormuş. GitHub’da bildirilen hatalara bakınca bu tür küçük sorunların epey fazla olabileceğini düşünüyorum; bu yüzden tüm iddialara bir miktar şüpheyle yaklaşmak gerekebilir.Yine de hızından ve ortaya çıkan işten çok etkilendim. Bu projenin bu kadar hızlı buraya geleceğini sanmıyordum; çok daha uzun süreceğini düşünmüştüm. Karşılaştırma yapmak gerekirse Deno çok daha önce başladı ama şu an epey geride kalmış gibi hissettiriyor; kişisel projelerimde Bun’ı denemeyi düşünüyorum.
Anekdot olarak, mevcutta milyonlarca müşterisi olan büyük bir uygulamada Bun’ı deniyoruz; şimdiye kadarki tek sorun Bun’ın kendisi değil,
patch-packageın henüzbun.lockbkilit dosyasını desteklememesi oldu.Bun tartışmasız biçimde Yarn’dan çok daha hızlı. Bunu Yarn’ı gerçekten seven biri olarak söylüyorum.
“Note — For a detailed breakdown of Node.js compatibility, check out: bun.sh/nodejs.”
Ayrıntılı listede desteklenmeyen modüller belirtilmiş.
Yanıt ayrıştırma sırasında hata verdiği için AWS SDK v3 kullanamadık;
node:cryptotamamen uygulanmadığı içinoctokitya dajsonwebtokenbağımlılıklarına sahip şeyleri kullanamadık.jest.resetAllMocks()olmadığı için testleri çalıştıramadık; başka bir projede isebun test, paylaşımlı kütüphane çağrısının hatalı olduğunu söyleyip hiç başlamadı.Bu yüzden yerel çalışma akışımız “Bun ile çalıştırmayı dene, başarısız olursa Node ile yeniden çalıştır” şeklinde. En azından npm yerine kullanılabilir ama hizmet çalıştırmak için kullanmayı şimdilik hayal etmek zor. İyi çalıştığında gerçekten şaşırtıcı olduğu için geleceği heyecan verici; ancak satış noktası Node uyumluluğuysa buna 1.0 demek zor bence.
Topluluk sohbetini Discord dışındaki bir platforma taşımayı düşünüp düşünmediklerini merak ediyorum
Discord; erişilebilirlik, gizlilik ve kapalı platforma bağımlılık sorunları nedeniyle HN’de birkaç kez gündeme geldi ve açık kaynak ruhuyla da pek uyumlu görünmüyor. [1] de bakmaya değer
[1] https://drewdevault.com/2021/12/28/Dont-use-Discord-for-FOSS...
Bun 0.6 duyurusunun yorumlarında da benzer bir soru neredeyse flag’lenecek kadar downvote almıştı: https://news.ycombinator.com/item?id=35970869
Bun 0.8 duyurusunun yorumlarında da aynı soru neredeyse hiç ilgi görmedi; tepki daha çok “diğer projeler de zaten kullanıyor…” düzeyindeydi: https://news.ycombinator.com/item?id=37244294
Açıkçası Discord, özgür ve açık kaynak yazılım projelerinin iletişimi barındırması için iyi bir yer. Yazıdaki “Discord’u seçerseniz o platformu meşrulaştırır ve FOSS platformlarından değer çalarsınız” türü iddialar oldukça zayıf görünüyor. Discord gerçekten meşru bir platform; ücretsiz, birçok cazip özelliği var ve erişilebilirliği de iyi. Hepsinden önemlisi, Discord’u seçmek FOSS iletişim platformlarının değerini ortadan kaldırmıyor
“IRC kullanın” demek de doğru değil. IRC, bilgisayarlara ve yazılıma aşina olmayan pek çok kişi için erişmesi çok zor bir ortam
Bun girişim sermayesi destekli; gelir modeli planını merak ediyorum
Yeni bir teknolojiye bakarken “N yıl sonra da bu teknolojinin aktif olarak geliştiriliyor olma olasılığını” değerlendiriyorum. Bun bir şekilde para kazanmak zorunda; aksi halde fonu kesilir
Bun lisansının MIT olması harika ve şirket batsa bile projenin ölmeyebileceğine dair umut veriyor. Şirketin başarılı olmasını isterim ama Bun’ı benimsesem ileride ne tür bir üst satışla karşılaşacağımı merak ediyorum
Oven, backend ve frontend JavaScript uygulamaları için çok hızlı serverless hosting ve sürekli entegrasyon sunacak; Bun ile çalıştırılması planlanıyor
Next.js, Vite, SvelteKit, SolidStart gibi frontend framework’lerini ve Express, Fastify, NestJS gibi backend framework’lerini desteklemesi planlanıyor
Dünya genelindeki veri merkezlerinin edge noktalarında kendi sunucularını işletme planı var; Oven, JavaScript stack’inin tamamını donanıma kadar uçtan uca entegre ederek yeni olanaklar yaratmayı amaçlıyor
bun deploygibi bir biçimde JS uygulama hosting’inden para kazanacak gibi görünüyorÖnce geniş ölçekte geliştirici benimsemesi kazanıp sonra kendi uygulama hosting’ine yumuşak biçimde yönlendirmek yaygın bir strateji
Tek kişinin yan projesini takip etmeye çalışırken o kadar zorlandım ki her şeyi Rollup’a taşıdım ve geriye bakmadım
Girişim destekli bir projeyle rastgele bir yan projenin kaygıları elbette farklı, ama nihai risk ikisinde de “bunu yapan kişi beni destekleyemezse ne olur?” sorusu
Her şeyi “açık kaynak” diye pazarlayıp ücretsiz bug raporları, katkılar, pazarlama ve benimseme kazandıktan sonra ticari ürüne itme yöntemi bu
Node tabanlı araçların katman katman birikmiş karmaşasının yerini alabileceği önerisi çok çekici
Çünkü
node,ts-node,nodemon,tsc,jest,ts-jest,webpack, Babel, birbiriyle uyumsuz 2 modül standardı, UMD karmaşası, 3 paket yöneticisi ve bunlar yüzünden patlayarak artan yapılandırma dosyalarının sayısını azaltabilirJavaScript etrafındaki araç ekosistemi kesinlikle en büyük acı noktası ve aslında oldukça yetkin ve keyifli bir dil olan ES6 + TypeScript’i tam anlamıyla angaryaya dönüştürüyor. Umarım Bun bunu başarır
CMake’ten Cargo’ya geçmeye benzer bir his verecek gibi
Blog yazısı, daha basit bir hepsi bir arada yazılımın değer önermesini çok ikna edici biçimde gösteriyor
Bu aralar “her şeyi kendin getir” yaklaşımındansa “pilleri dahil” yazılımlar bana daha cazip geliyor; bu yüzden Bun’ı denemek için sabırsızlanıyorum
Birden fazla yazılımı daha hızlı tek bir şeyle değiştirmeye çalışan Rome araçlarının runtime sürümü gibi hissettiriyor. Rome başarısız oldu ve yeni bir ekibin OSS’ine dönüştü. Bun’ın daha başarılı olmasını umuyorum ama bu kesinlikle çözmesi zor bir problem
Apple gibi donanımı ve işletim sistemini bizzat sahiplenip kontrol ettiğinizde sistemi derinlemesine optimize edebilir, tüm cihazların sorunsuz çalışacağına dair güven de verebilirsiniz. Hepsi bir arada araç seti, mükemmel çözümü bulmak için oradan oraya koşma yükünü azaltır ve zaten gözünüzün önünde duran çözümü kullanmanızı sağlar
Bun ve Deno’nun ikisini de kullanmış birinden, pratikte hangisinin daha ikna edici bir Node halefi olduğunu duymak isterim
Bun web sitesi Deno’dan çok daha iyi performans sunduğunu iddia ediyor; bunun gerçekten böyle olup olmadığını merak ediyorum. Öyleyse nedenini de bilmek isterim. Deno’nun da benzer hedefleri var gibi görünüyor
İki proje arasında büyük felsefi farklar olup olmadığını da merak ediyorum. Örneğin Bun’un her şeyi yeniden uygulamaya çalıştığı, Deno’nun ise Node sonrası yeni bir yol istediği gibi mi, emin değilim. İkisini de yeterince kullanmış biri var mı?
Bun ve Deno’nun ikisi de girişim sermayesi destekli araçlar olduğu için para kazanma ve sürdürülebilirlik konusunda temel şüphelerim var
Bun’un ana satış noktası performans gibi görünüyor; ama Node’da pek büyük performans sorunları yaşamadım. Aşırı hızlı değil, ama Node’un hızından önce G/Ç kısıtlarına takılma ihtimali çok daha yüksek
Deno’nun ana satış noktası, daha iyi paketleme, ES6’nın tam kullanımı vb. birçok açıdan “doğru yapılmış Node” olmasıydı ve bu iddia bana çekici gelmişti; ama yeni bir ekosistem kurma girişiminden vazgeçip Node uyumluluğu eklemeye yönelmiş gibi görünüyor
Aynı zamanda Node’un kendi test çalıştırıcısı ve yerleşik
.envdesteği gibi son iyileştirmeleri umut verici. Bu yüzden Bun ya da Deno kullanmak için güçlü bir neden bulmak zor; değiştirsem bile yeni nesil araçlar sürdürülemez hâle geldiğinde Node’a geri dönmek için somut bir yola ihtiyacım varBun her şeyi bir araya getirip çok hızlı yaparken, mümkün olduğunca Node ile uyumluluğu korumaya çalışıyor. Mevcut ekosistemi terk etmiyor
Deno, Node ekosistemine karşı fazla zıt bir bakış açısı benimsedi ve şimdi tekrar destek ekliyor
Halef açısından Bun’un tek seçenek olduğunu düşünüyorum. Çünkü Node uyumluluğunu korurken yeni özelliklerle yenilik yapmaya çalışıyor
Deno, güvenliği birinci ilke olarak alan alternatif bir Node runtime’ına daha yakın görünüyor; TypeScript ve JSX için yerleşik destek, linter gibi araçlar da içeriyor. Ayrıca V8 tabanlı. Gecikmeli olarak Ryan Dahl’ın Node’un böyle olması gerektiğini düşündüğü biçime yakın görünüyor
Bun teknik olarak WebKit tabanlı; tam olarak nedenini bilmiyorum, ama yalnızca bir runtime değil, daha iyi bir hepsi bir arada araç gibi görünüyor. Mevcut framework’lerle de varsayılan uyumluluk sağlıyor. Deno yakın zamana kadar npm uyumlu değildi; bunun en baştan niyet edilen şey mi, yoksa sürmekte olan bir yön değişikliği mi olduğunu da merak ediyorum
Geçen ay alternatif runtime olarak hem Deno’yu hem Bun’u denedik. Özetle, belli ölçüde karmaşık bir kod tabanında Bun neredeyse her zaman çalışıyor, Deno ise neredeyse hiçbir zaman çalışmıyor
Şu anda tüm testleri hem Node.js hem de Bun üzerinde çalıştırıyoruz; Deno’yu uygulama girişiminden vazgeçtik
Düzenleme: Değişiyor gibi görünüyor. Düzeltme için teşekkürler
Aslında dün yayımlanması planlanmıştı, ancak düzeltilmesi gereken bir
fetch()gövde akışı testi hatası vardıBlog yazısının Bun 1.0 GitHub’a yüklenene kadar herkese açılması planlanmıyordu; ama bağlantı herkese açık erişilebilirdi ve RSS beslemesinde taslağı gizleyemeyen bir hata vardı
Asıl hata
fetch()gövde akışı değil, özelliği tanımlı olmayabilecek bir nesneden özellik alan JavaScriptCore binding tarafındaydı. Kodun bir kısmı değerin nesne olup olmadığını kontrol etmeden yalnızcaJSCellolup olmadığına bakıyordu;JSCellgenelde nesnedir, ama symbol ya da BigInt gibi şeylerJSObjectdeğildirDünkü konu: https://news.ycombinator.com/item?id=37424724
Ek bir ipucu olarak, “dağıtım deposundan değil internetten indirme” tarzı kurulumlar için uygun SHA-256 gibi checksum içeren Ansible playbook/task seti örnekleri sunabilirsiniz. Puppet için de aynı şey geçerli, ama biraz daha karmaşık olur
Sistem yöneticilerinin işini biraz azaltabilir; bir ad vermek isterseniz SAX, yani Sistem Yöneticisi Deneyimi diyebilirsiniz
Bun, TypeScript React uygulamalarını yerleşik olarak çalıştırıp bundle edebiliyorsa, bunun üstüne Vite.js kullanmanın ne avantajı olduğunu merak ediyorum
Resmî sitedeki kılavuz, TypeScript React uygulaması oluştururken Bun + Vite.js kullanmayı gösterdiği için kafa karıştırıcı. [1]
GitHub’da da bununla ilgili bir issue var. [2]
Vite.js, Bun’ın ele alamadığı daha karmaşık senaryoları veya ileri düzey kullanım durumlarını mı üstleniyor? Benim Vite.js kullanımım temel bir TS+React ayarıyla başlayıp build almaktan ibaret, bu yüzden bir şeyleri kaçırıyor olabilirim
[1] https://bun.sh/guides/ecosystem/vite
[2] https://github.com/oven-sh/bun/issues/250
Henüz Bun’ı kullanmışlığım yok, ama anladığım kadarıyla yerel geliştirme sunucusunu çalıştırmak için Node yerine Bun’ı; bundle işlemleri için esbuild, tsc, Rollup ya da bunların kombinasyonları yerine Bun’ı; dönüşümler için de Babel ve TypeScript yerine Bun’ı kullanmak mümkün
Vite’ın sunduğu şey, frontend uygulama geliştirmeyi kolayca yapılandıran ve yerel çalışma sırasında iyi bir geliştirici deneyimi sağlayan bir kurulum
Şimdilik yapılandırma karmaşıklığı olduğu için ikisini birleştirmenin çok iyi bir fikir olduğunu düşünmüyorum
Mevcut ekosistemle uyumluluk Bun’ın temel hedeflerinden biri; amaç, insanların mevcut codebase’lerinde hemen kullanmaya başlayabilmesi ve zamanla daha fazla alana kademeli olarak dahil edebilmesi
Ayrıca Nuxt, SvelteKit, Astro, SolidStart, Qwik gibi yeni meta framework’lerin çoğu Vite üzerinde çalıştığından, Bun için bir benimseme yolu açılabilir
tscvarken neden Vite’a ihtiyaç var diye sormaya benziyorBun’ın “TypeScript React uygulamalarını çalıştırması”ndan ziyade, JSX/TSX dönüşümünü yerleşik olarak sunması gibi görüyorum