Nodejs的競爭者Bun又整活了,Bun.s3預告

大家好,我是農村程式設計師,獨立開發者,前端之虎陳隨易。
  • • 個人網站 1️⃣:https://chensuiyi.me
  • • 個人網站 2️⃣:https://me.yicode.tech
如果本文能給你提供啟發或幫助,歡迎一鍵三連,給我一些鼓勵~
如果能動動小手指,點點文中廣告,讓筆者賺點早餐錢,那就再好不過了。

前言

node_modules黑洞
天下苦 Node 久矣,群雄揭竿而起,勢必要從 Node 嘴上扯下一塊肉來。
目前 JavaScript 後端開發界有三大執行時:NodeDenoBun
Node 老將,自不必多說。
Deno 已經發布了 v2 版本,勢頭強勁。
Bun 也已經支援 Windows、Linux、MacOS 三大作業系統,俘獲不少粉絲。
目前短兵相接,開始進入近身搏鬥階段。
其中 Deno,高舉網際網路標準,執行時安全,原生 TypeScript 支援,內建統一開發工具等特性,穩紮穩打。
而 Bun,以整活最為出名,不得不說,確實整出了一些令人眼前一亮的功能和體驗。
而本文,分享新鮮出爐的,Bun 的最新整活 Bun.s3

正文

Bun.s3
起因呢,是 Bun 官方在 2024年12月29日,發出了上面這張圖,並附帶了下面這段話:
在下一版 Bun 中
Bun 獲得對 S3 的一流支援。上傳、下載、流式傳輸和預簽名無需任何依賴項。
什麼意思?
就是說,Bun 將內建 物件儲存 的相關操作,S3 是 aws(亞馬遜雲服務商) 的 物件儲存 方案,也是目前事實上的物件儲存標準。
國內的阿里雲的 OSS,騰訊雲的 COS 等,基本都是 S3 這一套協議。
那麼既然如此,Bun 官方便一不做,二不休,準備把這個做成 Bun 的內建介面。
咱們繼續看看使用效果。

返回資源URL
當你將 新響應 傳遞給 S3 檔案時,它會重定向到預先簽名的過期 URL。
這樣你就不會浪費伺服器的資源下載到 S3 併發送給使用者。

體驗與本地操作無異
該 API 的設計工作方式與 ResponseBlob 和 Bun.file(path) 非常相似,因此您可以像從本地檔案系統或 fetch() 一樣從 S3 讀取。

直接儲存物件儲存圖片
Bun.write() 也獲得了對 S3 的支援。
Bun.write() 可以將物件從 S3 直接下載到磁碟,也可以將本地檔案直接上傳到 S3
Bun.s3 可以與以下產品配合使用:
  • • AWS S3
  • • Google Cloud Storage
  • • Cloudflare R2
  • • Backblaze B2
  • • Hetzner Object Storage
  • • DigitalOcean Spaces
  • • 更多供應商
有許多不同的與 S3 相容的物件儲存 API。
如果做過阿里雲,騰訊雲 物件儲存 的對接,應該很容易看明白上面的程式碼。
對於這個  操作,我只能說一個字:
這是把 物件儲存 完全當成本地硬碟來用了,除了 Bun,其他兩個還真幹不出來。

討論

說實話,這個功能,東西是個好東西,但是呢,也存在爭議,大概如下:
  1. 1. 支援 Azure 和 Minio 嗎?
  2. 2. 為啥叫 Bun.s3,不叫 Bun.ObjectStorage
  3. 3. 不希望將其引入執行時,而是用單獨的包,比如 bun/s3 來替代。
  4. 4. 應該花更多時間處理 Node 的相容,而不是這種花裡胡哨的事情上。
來看看作者的回覆:

S3成為網際網路的檔案系統API
我們為 Bun 添加了 S3 支援,因為與 S3 相容的物件儲存服務逐漸成為網際網路的檔案系統 API。
用於在開發中讀取和寫入檔案的相同 API 應該在生產中也能起作用。

相容的服務
S3 API 專屬於特定供應商的想法已經過時了大約 10 年 – 以下是一些與 S3 相容的物件儲存服務:
  • • Google Cloud Storage (具有互操作性模式)
  • • IBM Cloud Object Storage
  • • Oracle Cloud Infrastructure Object Storage
  • • Cloudflare R2
  • • 阿里雲 OSS
  • • MinIO
  • • Ceph
  • • 騰訊雲物件儲存
  • • Backblaze B2
  • • DigitalOcean Spaces
  • • Linode Object Storage
  • • Vultr Object Storage
  • • OVHcloud Object Storage
  • • Scaleway Object Storage

尾言

筆者認為,Bun 的創新確實令人驚歎,也能倒逼 Node 和 Deno 做得更好。
但是,如果把 物件儲存 相關的介面內建到 執行時 裡,確實會造成執行時更加複雜,龐大。
核心方面的東西,穩定大於一切。
我更希望,有一個獨立的包來做這個事情,也更方便維護和程式碼貢獻。
不知道你怎麼看呢?歡迎在評論區留言。


相關文章