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

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

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

當你將
新響應
傳遞給 S3
檔案時,它會重定向到預先簽名的過期 URL。這樣你就不會浪費伺服器的資源下載到
S3
併發送給使用者。
該 API 的設計工作方式與
Response
、Blob
和 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. 支援 Azure
和Minio
嗎? -
2. 為啥叫 Bun.s3
,不叫Bun.ObjectStorage
? -
3. 不希望將其引入執行時,而是用單獨的包,比如 bun/s3
來替代。 -
4. 應該花更多時間處理 Node
的相容,而不是這種花裡胡哨的事情上。
來看看作者的回覆:

我們為 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
做得更好。但是,如果把
物件儲存
相關的介面內建到 執行時
裡,確實會造成執行時更加複雜,龐大。核心方面的東西,穩定大於一切。
我更希望,有一個獨立的包來做這個事情,也更方便維護和程式碼貢獻。
不知道你怎麼看呢?歡迎在評論區留言。