pnpm run
別名:run-script
執行在套件清單檔中定義的腳本。
範例
假設您在 package.json
中設定了一個 watch
腳本,如下所示
"scripts": {
"watch": "webpack --watch"
}
您現在可以使用 pnpm run watch
來執行該腳本!簡單吧?對於那些喜歡節省按鍵和時間的人來說,另一件要注意的事情是,所有腳本都別名為 pnpm 命令,所以最終 pnpm watch
只是 pnpm run watch
的簡寫(僅適用於與現有 pnpm 命令名稱不同的腳本)。
執行多個腳本
你可以使用正規表示法代替腳本名稱,同時執行多個腳本。
pnpm run "/<regex>/"
執行所有以 watch:
開頭的腳本
pnpm run "/^watch:.*/"
詳細資訊
除了 shell 已有的 PATH
之外,pnpm run
會在提供給 scripts
的 PATH
中包含 node_modules/.bin
。這表示只要你已安裝套件,就可以像一般指令一樣在腳本中使用它。例如,如果你已安裝 eslint
,你可以撰寫類似這樣的腳本
"lint": "eslint src --fix"
即使 eslint
沒有在你的 shell 中全域安裝,它也會執行。
對於工作區,<workspace root>/node_modules/.bin
也會新增到 PATH
中,因此如果工具已安裝在工作區根目錄中,則可以在任何工作區套件的 scripts
中呼叫它。
環境
pnpm 會自動為已執行的腳本建立一些環境變數。這些環境變數可用於取得關於執行中程序的內容資訊。
以下是 pnpm 建立的環境變數
- npm_command - 包含已執行指令的名稱。如果已執行的指令是
pnpm run
,則此變數的值會是 "run-script"。
選項
run
指令的任何選項都應該列在腳本名稱之前。列在腳本名稱之後的選項會傳遞給已執行的腳本。
所有這些都會以 --silent
選項執行 pnpm CLI
pnpm run --silent watch
pnpm --silent run watch
pnpm --silent watch
指令名稱之後的任何引數都會新增到已執行的腳本中。因此,如果 watch
執行 webpack --watch
,則此指令
pnpm run watch --no-color
將會執行
webpack --watch --no-color
--recursive, -r
這會從每個套件的 "scripts" 物件中執行任意指令。如果套件沒有此指令,則會略過。如果沒有任何套件有此指令,則指令會失敗。
--if-present
你可以使用 --if-present
旗標,以避免在腳本未定義時退出並產生非零退出碼。這讓你可以在不中斷執行鏈的情況下執行可能未定義的腳本。
--parallel
完全忽略並行性和拓撲排序,在所有符合套件中立即執行指定的指令碼,並加上前置串流輸出。這是針對許多套件中執行長時間處理的旗標,例如漫長的建置處理。
--stream
立即串流子處理程序的輸出,並加上來源套件目錄的前置。這允許來自不同套件的輸出交錯。
--aggregate-output
彙總並行執行的子處理程序輸出,並僅在子處理程序完成時印出輸出。它讓在使用 --parallel
或 --workspace-concurrency=<number>
執行 pnpm -r <command>
之後讀取大型日誌變得更容易(特別是在 CI 上)。僅支援 --reporter=append-only
。
--resume-from <package_name>
從特定專案繼續執行。如果您正在使用大型工作區,而且您想要在特定專案重新啟動建置,而不用執行建置順序中所有在該專案之前的專案,這會很有用。
--report-summary
將指令碼執行的結果記錄到 pnpm-exec-summary.json
檔案中。
pnpm-exec-summary.json
檔案範例
{
"executionStatus": {
"/Users/zoltan/src/pnpm/pnpm/cli/command": {
"status": "passed",
"duration": 1861.143042
},
"/Users/zoltan/src/pnpm/pnpm/cli/common-cli-options-help": {
"status": "passed",
"duration": 1865.914958
}
}
status
的可能值為:'passed'、'queued'、'running'。
--reporter-hide-prefix
隱藏並行執行的子處理程序輸出的工作區前置,並僅印出原始輸出。如果您在 CI 上執行,而且輸出必須採用特定格式,且不含任何前置(例如 GitHub Actions 註解),這會很有用。僅支援 --reporter=append-only
。
--filter <package_selector>
.npmrc 設定
enable-pre-post-scripts
- 預設值:true
- 類型:布林值
當為 true
時,pnpm 會自動執行任何前置/後置指令碼。因此執行 pnpm foo
會等同於執行 pnpm prefoo && pnpm foo && pnpm postfoo
。
script-shell
- 預設值:null
- 類型:路徑
使用 pnpm run
指令執行的指令碼要使用的殼層。
例如,要在 Windows 上強制使用 Git Bash
pnpm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
shell-emulator
- 預設值:false
- 類型:布林值
當為 true
時,pnpm 會使用 JavaScript 實作的 類 bash 殼層 來執行指令碼。
此選項簡化了跨平台指令碼編寫。例如,預設情況下,下列指令碼會在非 POSIX 相容系統上失敗
"scripts": {
"test": "NODE_ENV=test node test.js"
}
但如果將 shell-emulator
設定設為 true
,它將可在所有平台上執行。