跳到主要內容
maxstudioNews
AI 自動化DEV Community (Claude Code)約 5 分鐘

Claude Code 權限設定:自動執行 npm 腳本,但手動確認安裝指令

這篇文章提供在 Claude Code 中設定權限的實用指南,讓開發者可以自動執行 npm 腳本,同時仍需手動確認 npm install 等安裝指令。透過特定的 Bash 規則,可以大幅提升開發效率,避免重複的確認對話框。文中也涵蓋了 pnpm、yarn、bun 和 Python 專案的類似設定方法。

Claude Code 權限設定:自動執行 npm 腳本,但手動確認安裝指令
圖片來源:DEV Community (Claude Code)

這篇文章最初發表於 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 清單。

Share

覺得值得一看?分享給朋友。

以上為 AI 自動翻譯導讀。原文版權歸 DEV Community (Claude Code) 所有, 建議透過「閱讀原文」前往原始網站,以取得最完整資訊並支持原作者。

Newsletter

不用每天追,AI 重點每週寄給你

43 個來源、每 2 小時更新,太多看不完。電子報每週挑最值得看的幾則,附上 Max 的看法。

每週一封。Email 只用來寄電子報,每封信都能一鍵退訂。