跳至主要內容
版本:9.x

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 會在提供給 scriptsPATH 中包含 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,它將可在所有平台上執行。