執行環境套件管理器打包器測試執行器程式碼檢查格式化指南參考部落格意見回饋

bun audit

檢查已安裝的包是否存在已知的安全漏洞

在包含 bun.lock 檔案的專案中執行命令:

terminal
bun audit

Bun 從 bun.lock 讀取包列表(無需 node_modules),將其傳送到 npm 安全公告端點,並列印報告。對於來自作用域登錄檔的包,Bun 會將其傳送到該登錄檔。如果該登錄檔沒有安全公告端點,Bun 會將這些包列為已跳過,並且它們不會影響退出程式碼。

bun audit 永遠不會修改 package.json、bun.lock 或 node_modules。要應用修復,請使用 bun audit fix。

如果 Bun 未發現漏洞,命令會列印:

Code
No vulnerabilities found

否則,Bun 會列出每個受影響的包及其嚴重性、簡短描述和諮詢連結,隨後顯示摘要:

Code
3 vulnerabilities (1 high, 2 moderate)

  bun audit fix           upgrade the vulnerable packages within their ranges
  bun audit fix --latest  also cross major versions

過濾選項

--audit-level=<low|moderate|high|critical> - 僅報告嚴重性達到此級別或更高的漏洞:

terminal
bun audit --audit-level=high

--prod(-p、-P、--production)- 僅審計可通過 dependencies、optionalDependencies 或 peerDependencies 訪問的包:

terminal
bun audit --prod

--omit=<dev|optional|peer> - 跳過只能通過給定相依型別訪問的包。可重複使用。--omit=dev 與 --prod 相同:

terminal
bun audit --omit=optional --omit=peer

--ignore <id> - 根據 GHSA ID 或數字 ID 忽略安全公告。可重複使用。(CVE ID 不在登錄檔資料中,因此無法匹配。)

terminal
bun audit --ignore GHSA-c2qf-rxjj-qqgw --ignore 1112918

這些選項僅適用於 CLI;要在每次執行環境應用它們,請將其放入 package.json 指令碼中。

--json

列印登錄檔傳回的原始 JSON 響應,而不是格式化報告:

terminal
bun audit --json

JSON 未經過過濾——--audit-level 和 --ignore 只會影響退出程式碼。

bun audit fix

terminal
bun audit fix

執行審計,然後將每個存在漏洞的包升級到所有相依方的版本範圍都允許的最低無漏洞版本,並進行安裝。只有 bun.lock 和 node_modules 會發生變化,但有一個例外:Bun 會將固定為確切版本的直接相依視為 ^version。如果 Bun 找到修復版本,它會重寫 package.json(或 catalog)中的固定版本。

Code
fixing:
  ms@0.7.0 → 0.7.1
  lodash@4.17.20 → 4.17.21
    package.json: 4.17.20 → 4.17.21

blocked by a dependent's range:
  minimatch@0.3.0 → 3.0.2
    express@3.21.2 depends on minimatch@0.3.0
  semver@5.7.1 → 6.3.1
    my-app depends on semver@^5.0.0
    bun audit fix --latest

no published version fixes:
  left-pad@1.3.0  GHSA-xxxx-xxxx-xxxx
    bun audit fix --ignore GHSA-xxxx-xxxx-xxxx

Fixed 2 vulnerabilities in 2 packages
5 vulnerabilities remaining
  • 被相依方的版本範圍阻止——沒有安全版本符合某個相依方宣告的版本範圍。如果該範圍位於你自己的 package.json 或 catalog 中,bun audit fix --latest 可以繞過此限制。否則,請更新該相依方或新增 overrides 條目。
  • 沒有已釋出的修復版本——所有已釋出的版本都存在漏洞。請替換該包,或使用打印出的 --ignore 命令忽略此安全公告。
  • 如果沒有更高版本是安全的,但存在更低版本,Bun 會降級並將該行標記為 (downgrade)。
  • 如果安全版本仍比 --minimum-release-age 更新,Bun 仍會安裝該版本,並將該行標記為 (newer than --minimum-release-age)。
  • Bun 會像升級其他包一樣升級已修補的相依(patchedDependencies)。之後使用 bun patch 重新建立補丁。
  • 安裝後,Bun 會重新審計新的 lockfile。remaining 數量和退出程式碼會根據第二次審計結果確定,因此與後續執行 bun audit 報告的結果一致。
  • --dry-run 會列印計劃,但不進行安裝。
  • --json 會列印一個描述計劃和結果的 JSON 物件(fixes、blocked、unfixable、unmatched、unaudited、vulnerableAfterInstall、fixed、remaining、dryRun)。如果生命週期指令碼可能會向 stdout 寫入內容,請傳入 --ignore-scripts。
  • 在 bunfig.toml 中設定的安全掃描器會像執行 bun update 一樣,對即將安裝的包進行掃描。
  • Bun 不接受 --prod、--frozen-lockfile 和 --no-save,因為這些選項會阻止寫入 bun.lock。

bun audit fix --latest

terminal
bun audit fix --latest

與 bun audit fix 相同,但你自己的 package.json 檔案和 catalog 中的版本範圍不再阻止修復。Bun 會重寫這些範圍以接受新版本,同時保留其格式(^5.0.0 → ^6.3.1、~5.7.1 → ~6.3.1,確切版本則保持為確切版本)。第三方包宣告的版本範圍仍會阻止修復;對於這些情況,請使用 overrides。

退出程式碼

如果 Bun 應用 --audit-level 和 --ignore 後沒有剩餘漏洞,則退出程式碼為 0;否則為 1。對於 bun audit fix,退出程式碼根據安裝後的重新審計結果確定(或者在使用 --dry-run 時,根據計劃確定)。

如果登錄檔請求失敗,兩個命令都會向 stderr 列印 audit request failed,並以 1 退出。