這篇文章最初發表於 https://aicoding-guide.com。在 Claude Code 中,每次執行 npm run lint、npm run test 和 npm run build 都會跳出確認對話框,這是工作流程中最大的阻礙。由於 package.json 中的腳本都是你自己撰寫的指令,因此沒有理由不將它們視為一個群組來允許。
簡而言之,將 Bash(npm run:*) 加入允許清單,所有 npm 腳本就不會再提示確認。npm install 是一個不同的前綴,因此不會被意外包含在內。本文將介紹如何為 npm、pnpm、yarn 和 npx 設定允許腳本的模式。
您將了解 :* 的含義,以及如何將安裝指令排除在規則之外,以及 Python 專案(pytest、ruff)的等效設定。以下是一個設定範例:
{ "permissions" : { "allow" : [ "Bash(npm run:)" , "Bash(npm test)" , "Bash(npx tsc:)" , "Bash(npx vitest:)" , "Bash(npx eslint:)" , "Bash(npx prettier:)" ], "ask" : [ "Bash(npm install:)" , "Bash(npm i:)" , "Bash(npm uninstall:)" ] } }
npx 可以執行任何套件,因此此設定只允許您使用的特定套件,而非整個程式。請注意,npx 刻意沒有放在 ask 清單中:因為即使有更具體的 allow 規則匹配,ask 規則仍會觸發提示。
所以,如果將 Bash(npx:*) 放在 ask 中,您剛剛允許的 npx tsc 也會開始提示確認。將其排除在外意味著「我允許的指令會靜默執行,任何其他 npx 指令則遵循預設行為」,也就是在手動模式下會出現提示。
:* 的含義:Bash(npm run:*) 是一個前綴匹配,表示「以 npm run 開頭,後面可以是任何內容」。它也匹配參數,例如 npm run test -- --watch。請將星號放在子指令之後;如果星號放在前面,例如 Bash(npm * test),則會觸發啟動警告。
以下是各套件管理工具的模式:
工具 / 執行腳本 / 安裝指令 (ask)
npm / Bash(npm run:) / Bash(npm install:) , Bash(npm i:*)
pnpm / Bash(pnpm run:) , Bash(pnpm test) , Bash(pnpm lint) / Bash(pnpm add:) , Bash(pnpm install:*)
yarn / Bash(yarn run:) , Bash(yarn test) / Bash(yarn add:) , Bash(yarn install)
bun / Bash(bun run:) / Bash(bun add:) , Bash(bun install:*)
pnpm 和 yarn 允許省略 run,例如 pnpm lint。因此,您可以單獨列出您使用的腳本,或者允許整個程式,然後使用 ask 規則來阻止安裝指令。由於 ask 在 allow 之前評估,這種組合是安全的:
{ "permissions" : { "allow" : [ "Bash(pnpm:)" ], "ask" : [ "Bash(pnpm add:)" , "Bash(pnpm install:)" , "Bash(pnpm remove:)" ] } }
對於 Python 專案,設定如下:
{ "permissions" : { "allow" : [ "Bash(pytest:)" , "Bash(python -m pytest:)" , "Bash(ruff:)" , "Bash(mypy:)" , "Bash(uv run:)" ], "ask" : [ "Bash(pip install:)" , "Bash(uv add:*)" ] } }
儲存設定並重新啟動 Claude Code。開啟 /permissions 並檢查允許清單。嘗試執行「run the tests」。如果 npm run test 沒有提示就執行,表示設定成功。嘗試執行「add lodash」。如果 npm install lodash 提示確認,表示 ask 規則也正常運作。
一旦腳本可以自動執行,您可以在編輯後設定一個自動執行 lint 的 hook,以在擴展自動化時保持程式碼品質,詳情請參閱「使用 Claude Code hooks 在儲存時執行 lint 和格式化」。關於整體設計,請參考主文章「在 Claude Code 的 settings.json 中設計權限」。
總結來說,Bash(npm run:*) 可以在一條規則中允許所有 npm 腳本,而 npm install 由於前綴不同,因此會被排除在外。當允許整個程式(例如 pnpm 或 npx)時,請使用 ask 規則來阻止安裝指令,因為 ask 會在 allow 之前評估。對於 Python 專案,請允許 pytest、ruff 和 uv run,並將 pip install 放入 ask 清單。