npm-run-script

執行任意套件指令碼

選擇 CLI 版本

概要

npm run-script <command> [-- <args>]
aliases: run, rum, urn

說明

這會從套件的 "scripts" 物件執行任意指令。如果未提供 "command",它將列出可用的指令碼。

run[-script] 由 test、start、restart 和 stop 指令使用,但也可以直接呼叫。當套件中的指令碼列印出來時,它們會被區分為生命週期 (test、start、restart) 和直接執行的指令碼。

任何位置引數都會傳遞給指定的指令碼。使用 -- 傳遞 -- 開頭的旗標和選項,否則這些旗標和選項會被 npm 分析。

例如

npm run test -- --grep="pattern"

參數只會傳遞給 npm run 之後指定的腳本,不會傳遞給任何 prepost 腳本。

env 腳本是一個特殊的內建指令,可用於列出執行時腳本可用的環境變數。如果您的套件中定義了「env」指令,它將優先於內建指令。

除了 shell 已有的 PATH 之外, npm run 會將 node_modules/.bin 新增到提供給腳本的 PATH 中。任何由本機安裝的相依項提供的二進制檔案都可以使用,而不需要 node_modules/.bin 前綴。例如,如果您的套件中有一個 tapdevDependency,您應該寫

"scripts": {"test": "tap test/*.js"}

而不是

"scripts": {"test": "node_modules/.bin/tap test/*.js"}

實際執行腳本的 shell 取決於平台。在類 Unix 系統上,預設為 /bin/sh 指令,在 Windows 上為 cmd.exe/bin/sh 所引用的實際 shell 也取決於系統。您可以使用 script-shell 設定 自訂 shell。

腳本會從套件資料夾的根目錄執行,而不管在呼叫 npm run 時目前的作業目錄為何。如果您希望腳本根據您所在的子目錄使用不同的行為,您可以使用 INIT_CWD 環境變數,它會儲存您執行 npm run 時所在的完整路徑。

npm run 會將 NODE 環境變數設定為執行 npmnode 可執行檔。

如果您嘗試在沒有 node_modules 目錄的情況下執行腳本,並且失敗,您將會收到執行 npm install 的警告,以防您忘記執行。

工作區支援

您可以使用 workspaceworkspaces 設定,以便在指定的工作空間中從套件的 "scripts" 物件執行任意指令。如果沒有提供 "command",它將列出這些設定工作空間中可用的腳本。

給定一個設定了工作空間的專案,例如

.
+-- package.json
`-- packages
+-- a
| `-- package.json
+-- b
| `-- package.json
`-- c
`-- package.json

假設工作空間設定已在根層級 package.json 檔案中正確設定。例如

{
"workspaces": [ "./packages/*" ]
}

且每個已設定的工作區都有一個已設定的 test 指令碼,我們可以使用 workspaces 設定 在所有工作區中執行測試

npm test --workspaces

過濾工作區

也可以使用 workspace 設定以及名稱或目錄路徑在單一工作區中執行指令碼

npm test --workspace=a

也可以多次指定 workspace 設定,以便在多個工作區的內容中執行特定指令碼。在命令列中為 workspace 設定定義值時,也可以使用 -w 作為簡寫,例如

npm test -w a -w b

這個最後的命令將在 ./packages/a./packages/b 套件中執行 test

設定

workspace

  • 預設值
  • 類型:字串(可以設定多次)

啟用在目前專案的已設定工作區內容中執行命令,同時透過僅執行此設定選項所定義的工作區來進行篩選。

workspace 設定的有效值為

  • 工作區名稱
  • 工作區目錄的路徑
  • 父工作區目錄的路徑(將會選取該資料夾中的所有工作區)

當設定為 npm init 命令時,這可能會設定為尚未存在的資料夾,以建立資料夾並將其設定為專案中的全新工作區。

這個值不會匯出到子程式的環境中。

workspaces

  • 預設值:null
  • 類型:null 或布林值

設定為 true 以在所有已設定工作區的內容中執行命令。

明確將此設定為 false 將會導致 install 等命令完全忽略工作區。未明確設定時

  • node_modules 樹狀結構上執行的命令(安裝、更新等)會將工作區連結到 node_modules 資料夾中。- 執行其他操作的命令(測試、執行、發布等)將在根專案上執行,除非workspace 設定中指定一個或多個工作區。

這個值不會匯出到子程式的環境中。

include-workspace-root

  • 預設值:false
  • 類型:布林值

在為命令啟用工作區時,包含工作區根目錄。

為 false 時,透過 workspace 設定指定個別工作區,或透過 workspaces 旗標指定所有工作區,將導致 npm 僅對指定的,而非根專案進行操作。

這個值不會匯出到子程式的環境中。

if-present

  • 預設值:false
  • 類型:布林值

為 true 時,當對 package.jsonscripts 區段中未定義的腳本呼叫 run-script 時,npm 將不會以錯誤碼結束。此選項可用於在腳本存在時選擇性執行腳本,並在腳本失敗時失敗。這很有用,例如,在執行可能僅適用於其他通用 CI 設定中某些建置的腳本時。

這個值不會匯出到子程式的環境中。

ignore-scripts

  • 預設值:false
  • 類型:布林值

為 true 時,npm 不会執行在 package.json 檔案中指定的腳本。

請注意,明確用於執行特定腳本的命令,例如 npm startnpm stopnpm restartnpm testnpm run-script,如果設定 ignore-scripts,仍會執行其預期的腳本,但它們不會執行任何前置或後置腳本。

foreground-scripts

  • 預設值:false,除非使用 npm packnpm publish,其預設值為 true
  • 類型:布林值

在前景程序中執行所有建置腳本(即 preinstallinstallpostinstall)腳本,與主 npm 程序共用標準輸入、輸出和錯誤。

請注意,這通常會使安裝執行速度變慢,而且會更吵,但對於除錯很有用。

script-shell

  • 預設值:POSIX 系統上的 '/bin/sh',Windows 上的 'cmd.exe'
  • 類型:null 或字串

用於執行 npm execnpm runnpm init <package-spec> 命令的腳本的殼層。

另請參閱