- Bun 1.0 menangani eksekusi, build, pengujian, dan debugging JavaScript serta TypeScript dalam satu alat, dan kini sudah stabil serta siap untuk produksi
- Dengan tujuan menjadi pengganti Node.js, Bun mendukung API Node dan resolusi modul seperti
fs,path,net,__dirname,process, resolusinode_modules, dan lainnya; Express, Koa, Hono, serta aplikasi berbasis Next.js, Remix, Nuxt, Astro, SvelteKit, Nest, SolidStart, dan Vite dapat berjalan di Bun - Build native untuk Windows kini tersedia untuk pertama kalinya, tetapi sangat eksperimental; saat ini hanya mendukung runtime JavaScript, sementara package manager, test runner, dan bundler dinonaktifkan
- Perubahan sejak Bun 0.8 mencakup penambahan dukungan untuk Next.js, Astro, dan Nest.js, serta penghapusan perintah
bun devyang sebelumnya sudah tidak direkomendasikan; kini perintah tersebut menjalankan skrip"dev"dipackage.json - API Node.js yang baru didukung mencakup
child_process.fork()dan IPC,fs.cp(),fs.cpSync(),fs.watchFile(),fs.unwatchFile(), serta Unix socket padanode:http - Runtime-nya memiliki transpiler JavaScript bawaan, sehingga file
.js,.ts,.cjs,.mjs,.jsx,.tsxdapat dijalankan tanpa dependensi tambahan - Mendukung ESM dan CommonJS secara bersamaan, sehingga
importdanrequire()bisa digunakan dalam file yang sama tanpa bergantung pada ekstensi file atau pengaturan"type": "module"dipackage.json - API standar Web seperti
fetch,Request,Response,WebSocket, danReadableStreamsudah terintegrasi, sehingga bisa digunakan tanpa paket sepertinode-fetchdanws - Hot reload dapat digunakan melalui opsi
--hot, danBun.serve()juga menjadi target hot reload - API Bun menyediakan
Bun.file(),Bun.write(),Bun.serve(),bun:sqlite, danBun.passworduntuk menangani input/output file, server HTTP/WebSocket, SQLite, serta hash dan verifikasi kata sandi bcrypt·argon2 - Package manager menyediakan
bun install,bun add,bun remove, danbun update, dengan cara yang kompatibel dengan npm: membacapackage.jsondan menulis kenode_modules - Test runner
bun:testmenyediakan API yang kompatibel dengan Jest, dan secara internal memetakan ulang import@jest/globalsdanvitestkebun:test - Bundler mendukung bundling dan minify JavaScript serta TypeScript, menyediakan API plugin yang kompatibel dengan esbuild, dan menghadirkan macro JavaScript yang menjalankan fungsi JavaScript saat proses bundling untuk meng-inline nilai
1 komentar
Pendapat Hacker News
Saya ikut mengembangkan Bun. Kalau ada pertanyaan, saya bisa menjawabnya
Akan bagus kalau moderator mengganti tautannya ke tulisan blog, karena penjelasannya lebih baik daripada halaman rilis GitHub
Tulisan blog: https://bun.sh/blog/bun-v1.0
Hal yang paling mengesankan adalah bisa memakai
importdanrequire()dalam file yang sama, tanpa perlu memikirkan.js/.cjs/.mjsatau"type": "module"Tanpa ini, ekosistem Node.js terasa hampir sepenuhnya rusak, dan Bun tampaknya bisa menyelamatkannya. Menurut saya hal paling hebat dari Bun bukan performanya, melainkan pilihan-pilihan praktis dan ramah developer yang terus diambil Jarred
Mereka hanya memilih kompromi yang berbeda, dan akibatnya kemungkinan ada kumpulan package lain yang tidak berjalan. Saya penasaran apakah ada dasar untuk menganggap Bun telah memecahkan rahasia yang tidak bisa dipecahkan tool lain
Menurut saya, ini adalah cara yang benar. Ekosistem Node yang terpecah telah sangat merugikan bahasa dan runtime secara keseluruhan
importvsrequireKalau tidak memakai aplikasi React atau solusi siap pakai, ekosistem JS modern benar-benar menyakitkan, terutama bagi orang yang membuat library kecil. Saya bahkan tidak bisa membayangkan betapa sulit dan bikin frustrasinya ini bagi pemula
Fakta bahwa Bun menyelesaikan masalah itu saja sudah cukup menjadi alasan untuk mencobanya. Saya tidak menyangka akan merasa antusias terhadap satu lagi runtime atau build tool JS, dan berkat tim Bun saya berharap hari-hari saya bisa sedikit lebih waras
bundlermuncul di TypeScript 5.0, 6 bulan terakhir umumnya cukup baikAda masalah yang sangat jarang, tetapi sampai proyek-proyek memperbaikinya, saya mengakalinya dengan
pnpm patchdan perubahan meta. Tahun 2023 bisa dibilang tahun modul, dan kondisi airnya baik-baik sajatype: moduledan.js/.cjs/.mjs/.tsDi aplikasi produksi tentu saja harus jelas apa yang dipakai, tetapi untuk prototyping, perilaku Bun yang permisif membuat kita bisa menulis kode dulu dan memikirkan sisanya nanti
Saya bertanya-tanya apakah untuk rilis 1.0 yang belum mengimplementasikan seluruh
node:tidak ada frasa yang lebih baik daripada pengganti drop-inSaya cukup kecewa karena dua proyek pertama yang saya coba ternyata bukan pengganti drop-in, dan sekarang saya jadi meragukan semua komunikasi Bun
Sebagai konteks, kedua proyek itu memakai
oscyang membutuhkandgram. Saya menemukan tiket pelacakan permintaan fitur dari 9 bulan lalu, tetapi tidak ada rencana implementasi, dan ketika mencaridgramdi halaman pengumuman ini tidak ada hasil apa punSaran cepat: sebaiknya modul yang belum didukung Bun 1.0 disebutkan secara eksplisit dan dimasukkan ke bagian kompatibilitas Node.js
Sunting: Saya menemukan dokumentasi dukungan Node — https://bun.sh/docs/runtime/nodejs-apis . Akan bagus kalau ditautkan di catatan rilis
Sekilas, tampaknya ada sekitar 17 modul yang diimplementasikan, 17 diimplementasikan sebagian, dan 7 belum diimplementasikan
1.0.0-betadaripada1.0.0Saya baru saja menginstal v1.0.0 dan menjalankan
bun repl, tetapi gagal dengan exit code 1; ternyata REPL mencoba memakai port 3000, yang di lingkungan saya sudah digunakan. Melihat bug yang dilaporkan di GitHub, sepertinya ada cukup banyak masalah kecil seperti ini, jadi rasanya semua klaim perlu disikapi dengan cukup skeptisMeski begitu, saya sangat terkesan dengan kecepatan dan hasilnya. Saya tidak menyangka proyek ini bisa sampai sejauh ini secepat ini, dan mengira akan butuh jauh lebih lama. Sebagai perbandingan, Deno mulai jauh lebih awal tetapi sekarang terasa tertinggal cukup jauh, jadi saya berniat mencoba Bun untuk proyek pribadi
Secara anekdotal, kami sedang menguji Bun pada aplikasi besar dengan jutaan pelanggan eksisting, dan sejauh ini satu-satunya masalah bukan pada Bun sendiri, melainkan
patch-packageyang belum mendukung lockfilebun.lockbBun tidak diragukan lagi jauh lebih cepat daripada Yarn. Saya mengatakan ini sebagai orang yang sangat menyukai Yarn
“Note — For a detailed breakdown of Node.js compatibility, check out: bun.sh/nodejs.”
Daftar detailnya menyebutkan modul yang tidak didukung
AWS SDK v3 tidak bisa dipakai karena terjadi error saat parsing respons, dan karena
node:cryptobelum sepenuhnya diimplementasikan, kami tidak bisa memakai hal-hal yang bergantung padaoctokitataujsonwebtoken.jest.resetAllMocks()tidak ada sehingga test tidak bisa dijalankan, dan di proyek lainbun testbahkan tidak berjalan sama sekali karena mengatakan panggilan shared library salahJadi alur kerja lokalnya adalah “coba jalankan dengan Bun, kalau gagal jalankan lagi dengan Node”. Setidaknya mungkin bisa dipakai sebagai pengganti npm, tetapi saya masih sulit membayangkan memakainya untuk menjalankan layanan. Saat berhasil, hasilnya benar-benar mengesankan sehingga saya menantikan masa depannya, tetapi kalau poin jualnya adalah kompatibilitas Node, menurut saya sulit menyebutnya 1.0
Saya penasaran apakah pernah terpikir untuk memindahkan chat komunitas ke platform selain Discord
Discord sudah beberapa kali dibahas di HN karena masalah aksesibilitas, privasi, dan ketergantungan pada platform proprietari, dan tampaknya juga kurang sejalan dengan semangat open source. [1] juga layak dijadikan referensi
[1] https://drewdevault.com/2021/12/28/Dont-use-Discord-for-FOSS...
Di komentar pengumuman Bun 0.6 pun, pertanyaan serupa mendapat downvote sampai hampir ditandai flag: https://news.ycombinator.com/item?id=35970869
Di komentar pengumuman Bun 0.8, pertanyaan yang sama juga hampir tidak mendapat perhatian, dan responsnya kira-kira, “proyek lain juga semua memakainya…”: https://news.ycombinator.com/item?id=37244294
Sejujurnya, Discord adalah tempat yang baik bagi proyek perangkat lunak bebas dan open source untuk menaruh komunikasi komunitas. Argumen dalam tulisan itu bahwa “memilih Discord berarti melegitimasi platform tersebut dan mengambil nilai dari platform FOSS” terasa cukup rapuh. Discord memang platform yang sah, gratis, punya banyak fitur menarik, dan aksesibilitasnya juga baik. Yang terpenting, memilih Discord tidak membuat nilai platform komunikasi FOSS hilang
Saran untuk “pakai IRC” juga tidak tepat. IRC sangat sulit diakses bagi banyak orang yang tidak terbiasa dengan komputer dan perangkat lunak
Bun berbasis pendanaan ventura, jadi saya penasaran dengan rencana monetisasinya
Saat melihat teknologi baru, saya mempertimbangkan “seberapa besar kemungkinan teknologi ini masih aktif dikembangkan dalam N tahun ke depan”. Bun harus menghasilkan uang dengan suatu cara, kalau tidak pendanaannya akan terhenti
Lisensi Bun yang MIT itu bagus, dan memberi harapan bahwa proyeknya tidak harus mati meski perusahaannya bangkrut. Saya berharap perusahaannya sukses, tetapi jika mengadopsi Bun, saya penasaran upsell seperti apa yang mungkin muncul nanti
Oven akan menyediakan hosting serverless dan continuous integration yang sangat cepat untuk aplikasi JavaScript backend dan frontend, dan akan ditenagai oleh Bun
Rencananya akan mendukung framework frontend seperti Next.js, Vite, SvelteKit, SolidStart, serta framework backend seperti Express, Fastify, dan NestJS
Rencananya mereka akan mengoperasikan server sendiri di edge data center di seluruh dunia, dan Oven ingin mengintegrasikan seluruh stack JavaScript secara end-to-end hingga ke hardware untuk membuka kemungkinan baru
bun deployIni strategi umum: terlebih dahulu mendapatkan adopsi developer dalam skala besar, lalu mengarahkan mereka secara halus ke hosting aplikasi milik sendiri
Saya terlalu kerepotan mencoba mengikuti side project satu orang, jadi memindahkan semuanya ke Rollup dan tidak pernah menoleh ke belakang
Kekhawatiran pada proyek yang didanai ventura dan side project acak jelas berbeda, tetapi risiko akhirnya sama-sama “bagaimana kalau pembuatnya tidak bisa mendukung saya?”
Caranya adalah mempromosikan semuanya sebagai “open source” untuk mendapatkan laporan bug gratis, kontribusi, pemasaran, dan adopsi, lalu mendorongnya ke produk komersial
Gagasan bahwa Bun bisa menggantikan kekacauan berlapis dari tool berbasis Node sangat menarik
Karena ini bisa mengurangi
node,ts-node,nodemon,tsc,jest,ts-jest,webpack, Babel, 2 spesifikasi modul yang tidak saling cocok, kekacauan UMD, 3 package manager, dan ledakan file konfigurasi yang diakibatkannyaEkosistem tooling di sekitar JavaScript jelas adalah sumber sakit kepala terbesar, dan membuat ES6 + TypeScript—yang pada dasarnya bahasa yang cukup mumpuni dan nyaman—menjadi pekerjaan remeh yang merepotkan. Saya berharap Bun berhasil
Rasanya mungkin akan mirip seperti beralih dari CMake ke Cargo
Tulisan blognya menunjukkan proposisi nilai software all-in-one yang lebih sederhana dengan sangat meyakinkan
Belakangan ini saya lebih tertarik pada software “batteries included” daripada “bawa semuanya sendiri”, jadi saya menantikan untuk mencoba Bun
Rasanya seperti versi runtime dari tool Rome yang dulu mencoba menggantikan banyak software dengan satu yang lebih cepat. Rome gagal dan beralih menjadi OSS oleh tim baru. Saya berharap Bun lebih berhasil, tetapi ini jelas masalah yang sulit dipecahkan
Jika memiliki dan mengendalikan hardware serta sistem operasi sendiri seperti Apple, kita bisa mengoptimalkan sistem secara mendalam, dan juga memberi rasa aman bahwa semua perangkat bekerja mulus. Kumpulan tool all-in-one mengurangi beban untuk berlari-lari mencari solusi sempurna, dan membuat kita memakai solusi yang sudah ada di depan mata
Kepada orang yang sudah mencoba Bun dan Deno, saya ingin mendengar mana yang sebenarnya lebih meyakinkan sebagai penerus Node
Situs web Bun mengklaim performanya jauh lebih baik daripada Deno, dan saya penasaran apakah memang begitu dalam praktiknya. Kalau ya, saya juga ingin tahu alasannya. Deno juga tampaknya punya tujuan yang mirip
Saya juga penasaran apakah ada perbedaan filosofis yang besar di antara kedua proyek ini. Misalnya, apakah Bun mencoba mengimplementasikan ulang segala macam hal, sementara Deno menginginkan cara baru setelah Node. Ada yang sudah cukup memakai keduanya?
Bun dan Deno sama-sama tool berbasis pendanaan ventura, jadi ada keraguan mendasar soal monetisasi dan keberlanjutannya
Nilai jual utama Bun tampaknya adalah performa, tetapi saya jarang mengalami masalah performa besar di Node. Memang tidak super cepat, tetapi jauh lebih mungkin terbentur batasan I/O daripada kecepatan Node
Nilai jual utama Deno adalah “Node yang dibuat dengan benar” dalam banyak hal, seperti packaging yang lebih baik dan penggunaan penuh ES6, dan klaim itu menarik bagi saya. Namun sepertinya mereka menyerah pada upaya membangun ekosistem baru dan beralih menambahkan kompatibilitas Node
Pada saat yang sama, peningkatan terbaru di Node sendiri seperti test runner bawaan dan dukungan
.envbawaan cukup menggembirakan. Jadi sulit menemukan alasan kuat untuk memakai Bun atau Deno, dan kalaupun pindah, saya butuh jalur konkret untuk kembali ke Node jika tool generasi baru itu tidak berkelanjutanBun menggabungkan semuanya dan membuatnya sangat cepat, sambil berusaha mempertahankan kompatibilitas dengan Node sejauh mungkin. Mereka tidak meninggalkan ekosistem yang sudah ada
Deno mengambil pandangan yang terlalu konfrontatif terhadap ekosistem Node, dan sekarang sedang menambahkan kembali dukungan
Dari sudut pandang penerus, menurut saya Bun adalah satu-satunya pilihan. Karena mereka berusaha berinovasi dengan fitur baru sambil mempertahankan kompatibilitas Node
Deno lebih terlihat seperti runtime Node alternatif dengan keamanan sebagai prinsip utama, serta menyertakan tool seperti dukungan bawaan untuk TypeScript dan JSX, juga linter. Ia juga berbasis V8. Terlihat mendekati bentuk yang belakangan menurut Ryan Dahl seharusnya menjadi Node
Bun secara teknis berbasis WebKit, tetapi saya tidak tahu persis kenapa, dan tampaknya bukan hanya runtime melainkan tool all-in-one yang lebih baik. Ia juga menyediakan kompatibilitas bawaan dengan framework yang sudah ada. Sampai belum lama ini Deno tidak kompatibel dengan npm, dan saya juga penasaran apakah memang itu niat awalnya atau perubahan arah yang sedang berlangsung
Bulan lalu kami menguji Deno dan Bun sebagai runtime alternatif. Ringkasnya, pada codebase yang cukup kompleks, Bun hampir selalu berjalan dan Deno hampir selalu tidak
Sekarang kami menjalankan semua test di Node.js dan Bun, dan sudah menyerah mencoba menerapkan Deno
Edit: sepertinya ini sedang berubah. Terima kasih atas koreksinya
Awalnya rilis direncanakan kemarin, tetapi ada kegagalan test streaming body
fetch()yang perlu diperbaikiArtikel blog seharusnya belum dipublikasikan sampai Bun 1.0 naik ke GitHub, tetapi tautannya bisa diakses publik dan ada bug yang membuat draft tidak tersembunyi dari RSS feed
Bug sebenarnya bukan pada streaming body
fetch(), melainkan pada binding JavaScriptCore yang mengambil properti dari objek yang propertinya mungkin belum didefinisikan. Sebagian kode hanya memeriksa apakah nilainyaJSCell, tanpa memastikan apakah nilainya objek;JSCellbiasanya objek, tetapi hal seperti symbol atau BigInt bukanJSObjectThread kemarin: https://news.ycombinator.com/item?id=37424724
Sebagai petunjuk tambahan, untuk instalasi dengan cara “mengunduh dari internet, bukan dari repositori distro”, bisa disediakan contoh playbook/task set Ansible dengan checksum yang sesuai seperti SHA-256. Puppet juga bisa, meski akan sedikit lebih rumit
Ini bisa sedikit meringankan pekerjaan administrator sistem, dan kalau ingin diberi nama, bisa disebut SAX, yaitu pengalaman administrator sistem
Jika Bun dapat menjalankan dan mem-bundle aplikasi TypeScript React secara bawaan, saya penasaran apa keuntungan memakai Vite.js di atasnya
Panduan di situs resminya menunjukkan cara memakai Bun + Vite.js saat membuat aplikasi TypeScript React, jadi ini membingungkan. [1]
Ada juga isu terkait di GitHub. [2]
Apakah Vite.js menangani skenario yang lebih kompleks atau use case lanjutan yang tidak bisa ditangani Bun? Penggunaan Vite.js saya sebatas memulai dan mem-build dengan setup TS+React dasar, jadi mungkin ada sesuatu yang saya lewatkan
[1] https://bun.sh/guides/ecosystem/vite
[2] https://github.com/oven-sh/bun/issues/250
Saya belum punya pengalaman memakai Bun, tetapi pemahaman saya: untuk menjalankan server pengembangan lokal, Bun bisa dipakai alih-alih Node; untuk bundling, Bun bisa dipakai alih-alih esbuild atau tsc, Rollup, atau kombinasinya; dan untuk transformasi, Bun bisa dimanfaatkan alih-alih Babel dan TypeScript
Yang disediakan Vite adalah konfigurasi yang memudahkan penyiapan pengembangan aplikasi frontend dan memberikan developer experience yang baik saat bekerja secara lokal
Saat ini masih ada kompleksitas konfigurasi, jadi menurut saya menggabungkan keduanya belum terlalu ideal
Kompatibilitas dengan ekosistem yang sudah ada adalah tujuan inti Bun, jadi maksudnya agar orang bisa langsung mulai memakainya di codebase yang sudah ada dan secara bertahap mengadopsinya di lebih banyak bagian
Dan karena sebagian besar meta-framework baru seperti Nuxt, SvelteKit, Astro, SolidStart, dan Qwik berjalan di atas Vite, ini bisa membuka jalur adopsi Bun
tscMenurut saya Bun bukan benar-benar “menjalankan aplikasi TypeScript React”, melainkan lebih menyediakan transformasi JSX/TSX secara bawaan