npm 上的包可以在其 package.json 中定義_生命周期腳本_。下面列出了一些最常見的腳本,但還有 許多其他腳本。
preinstall:在包安裝之前運行postinstall:在包安裝之後運行preuninstall:在包卸載之前運行prepublishOnly:在包發布之前運行
這些腳本是任意的 shell 命令,包管理器應該在適當的時候讀取並執行它們。但是執行任意腳本代表潛在的安全風險,因此與其他 npm 客戶端不同,Bun 默認不執行任意的生命周期腳本。
postinstall
postinstall 腳本特別重要。它被廣泛用於構建或安裝特定平台的二進制文件,用於實現為 原生 Node.js 插件 的包。例如,node-sass 是一個流行的包,它使用 postinstall 來構建 Sass 的原生二進制文件。
json
{
"name": "my-app",
"version": "1.0.0",
"dependencies": {
"node-sass": "^6.0.1"
}
}trustedDependencies
Bun 不使用執行任意腳本的方法,而是采用"默認安全"的方法。你可以將某些包添加到允許列表中,Bun 將為這些包執行生命周期腳本。要告訴 Bun 允許特定包的生命周期腳本,請將包名稱添加到 package.json 中的 trustedDependencies 數組。
json
{
"name": "my-app",
"version": "1.0.0",
"trustedDependencies": ["node-sass"]
}一旦添加到 trustedDependencies,安裝/重新安裝包。Bun 將讀取此字段並為 my-trusted-package 運行生命周期腳本。
默認情況下,允許前 500 個具有生命周期腳本的 npm 包。你可以 在此處 查看完整列表。
--ignore-scripts
要為所有包禁用生命周期腳本,請使用 --ignore-scripts 標志。
bash
bun install --ignore-scripts