大家好,我是農村程序員,獨立開發者,行業觀察員,前端之虎陳隨易。我會在這里分享關于 獨立開發
、編程技術
、思考感悟
等內容,歡迎關注。
技術群與交朋友請在個人網站聯系我,網站 1??:https://chensuiyi.me,網站 2??:https://me.yicode.tech。
如果你覺得本文有用,一鍵三連 (點贊
、評論
、轉發
),就是對我最大的支持~
node_modules 隔離
這是本次更新最令人興奮的功能了,請看上圖,左側是 v1.2.18
的 node_modules 結構,所有依賴都平鋪到一起。右側是 v1.2.19
的 node_modules 結構,在使用 workspaces 管理的 monorepo 多項目倉庫可以擁有自己的 node_modules 了。
也就是說,如果你的項目使用了一個依賴的不同版本,那么現在可以多版本共存了。也正是因為這個功能,不少人表示,是時候進入到 Bun 的世界了。
但,這個功能不是默認啟用的,使用命令 bun install --linker=isolated
來手動指定安裝方式為隔離模式。更好的方法則是在項目根目錄創建 bunfig.toml
文件,配置如下:
[install]
linker = "isolated"
這樣直接運行 bun install
,無需指定 --linker=isolated
參數。
Bun.sql
速度現在提高了 5 倍
import { SQL } from 'bun:sql';const db = new SQL('postgres://user:pass@host:port/db');// Bun 自動將這些查詢流水線化,
// 將它們發送到服務器,而無需等待每個查詢的單獨響應。
const queries = [];
for (let i = 0; i < 100; i++) {// .execute() 用于即發即棄查詢queries.push(db`SELECT ${i}`.execute());
}// 等待所有結果
const results = await Promise.all(queries);
console.log(results.length); // 100await db.end();
Bun 的內置 PostgreSQL 客戶端 Bun.sql
現在可以自動對查詢進行流水線化,從而顯著提升性能。
流水線化允許將多個查詢發送到服務器,而無需等待前一個查詢的響應,從而減少網絡延遲的影響。
這在并行執行許多小型獨立查詢時尤其有效 (例如,一個 API 服務器同時處理多個并發請求)。
此更改默認啟用,無需更改代碼,在基準測試中,對于高并發工作負載,Bun.sql
現在比在 Bun 中運行的 postgres 包快約 3.4倍
,比在 Node.js 中運行的 postgres 快約 6倍
。
手動選擇依賴更新
更新依賴的時候,執行 bun update --interactive
,簡寫 bun update -i
,即可列出所有待更新依賴,可以手動選擇更新哪些依賴。
這個功能跟 npm-check-updates
和 antfu 的 taze
類似,不過能被 bun 內置,還是更方便的。
新增 bun pm pkg
命令
# 獲取單個屬性
bun pm pkg get name
# 獲取多個屬性
bun pm pkg get name version
# 設置單個屬性
bun pm pkg set name="my-package"
# 設置多個屬性
bun pm pkg set scripts.test="jest" version=2.0.0
# 刪除單個屬性
bun pm pkg delete description
# 刪除嵌套屬性
bun pm pkg delete scripts.test contributors[0]
雖然好像大部分時候用不上,但也非常實用,有時候需要快速修改屬性,就不需要創建單獨的腳本文件,或者引入第三方包了。
在 workspaces 中更快的安裝速度
修復了導致安裝過程中多次重新評估工作區包的錯誤,這使得使用 Bun 工作區的 Monorepos 的安裝速度更快、更可靠。
{"dependencies": {"react": "18.2.0"},"devDependencies": {"react": "18.3.0"},"peerDependencies": {"react": "18.2.1"}
}
當多個依賴組都有相同的依賴時,目前已調整解析順序為 devDependencies
> optionalDependencies
> dependencies
> peerDependencies
。
bun pm pack
增加 --quiet
參數
bun pm pack
命令現在支持 --quiet
參數,使用 --quiet
標志后,它會抑制所有詳細輸出,僅將生成的 tarball 文件名打印到 stdout。
這對于需要捕獲文件名的腳本和自動化工作流程尤其有用。
$ bun pm pack
bun pack v1.2.18packed 131B package.json
packed 40B index.jsmy-package-1.0.0.tgzTotal files: 2
Shasum: f2451d6eb1e818f500a791d9aace80b394258a90
Unpacked size: 171B
Packed size: 249B
?? 這是不加 --quiet
參數的輸出。
$ bun pm pack --quiet
> my-package-1.0.0.tgz
?? 這是加上 --quiet
參數的輸出。
TARBALL=$(bun pm pack --quiet)
echo "Created: $TARBALL"
> Created: my-package-1.0.0.tgz
?? 具體應用場景和效果如上。
讀取 .npmrc
中的 link-workspace-packages
和 save-exact
bun install
和 bun add
現在會讀取并應用項目 .npmrc
文件中的 link-workspace-packages
和 save-exact
設置,這允許更精細地控制依賴項管理,與其他包管理器保持一致。
# ./.npmrc
save-exact=true
例如,要始終保存精確版本而不是使用 ^
前綴,可以設置 save-exact=true
。
{"dependencies": {"is-odd"