npx -- <pkg>[@<version>] [args...]
npx --package=<pkg>[@<version>] -- <cmd> [args...]
npx -c '<cmd> [args...]'
npx --package=foo -c '<cmd> [args...]'
此指令讓您能從 npm 套件執行任意指令(無論是已在本機安裝或從遠端擷取),其情境類似於透過 npm run
執行指令。
由 --package
選項指定的所有套件將會提供給已執行指令的 PATH
,以及任何已在本機安裝的套件可執行檔。--package
選項可以指定多次,以在所有指定套件都可用的環境中執行提供的指令。
如果任何要求的套件不存在於本機專案相依性中,則會將其安裝到 npm 快取中的資料夾,並將其新增到已執行處理序的 PATH
環境變數中。系統會顯示提示(可透過提供 --yes
或 --no
來抑制)。
未提供指定項目的套件名稱將與本機專案中存在的任何版本相符。具有指定項目的套件名稱僅在與本機相依性具有完全相同名稱和版本時才視為相符。
如果未提供 -c
或 --call
選項,則位置引數會用於產生指令字串。如果未提供 --package
選項,則 npm 會根據下列啟發法嘗試從作為第一個位置引數提供的套件指定項中判斷可執行檔名稱
- 如果套件在
package.json
中的 bin
欄位中只有一個項目,或所有項目都是同一個指令的別名,則會使用該指令。
- 如果套件有多個
bin
項目,其中一個與 name
欄位的未取範圍部分相符,則會使用該指令。
- 如果這不會產生完全一個選項(可能是因為沒有 bin 項目,或沒有任何項目與套件的
name
相符),則 npm exec
會傳回錯誤訊息而結束。
若要執行除命名二進位檔之外的二進位檔,請指定一個或多個 --package
選項,這將防止 npm 從第一個指令引數推論出套件。
透過 npx
二進制檔案執行時,所有旗標和選項必須在任何位置引數之前設定。透過 npm exec
執行時,可以使用雙破折號 --
旗標來抑制 npm 分析應傳送至已執行指令的開關和選項。
例如
$ npx foo@latest bar --package=@npmcli/foo
在此情況下,npm 會解析 foo
套件名稱,並執行下列指令
$ foo bar --package=@npmcli/foo
由於 --package
選項在位置引數之後,因此會將其視為已執行指令的引數。
相反地,由於 npm 的引數分析邏輯,執行此指令會有所不同
$ npm exec foo@latest bar --package=@npmcli/foo
在此情況下,npm 會先分析 --package
選項,解析 @npmcli/foo
套件。然後,它會在該內容中執行下列指令
$ foo@latest bar
建議使用雙破折號字元明確告知 npm 停止分析命令列選項和開關。因此,下列指令等同於上述 npx
指令
$ npm exec -- foo@latest bar --package=@npmcli/foo
使用提供的引數執行本機相依關係中的 tap
版本
$ npm exec -- tap --bail test/foo.js
$ npx tap --bail test/foo.js
透過指定 --package
選項,執行除了與套件名稱相符的指令名稱以外的指令
$ npm exec --package=foo -- bar --bar-argument
$ npx --package=foo bar --bar-argument
在目前專案的內容中執行任意 shell 指令碼
$ npm x -c 'eslint && say "hooray, lint passed"'
$ npx -c 'eslint && say "hooray, lint passed"'
在 npm v7.0.0 中重新撰寫 npx
二進制檔案,並於當時棄用獨立的 npx
套件。npx
使用 npm exec
指令,而不是使用獨立的引數分析程式和安裝程序,並提供一些功能以維持與先前版本中接受的引數之間的向後相容性。
這導致其功能性發生了一些轉變
- 可以提供任何
npm
配置值。
- 為防止因輸入錯誤的套件名稱而導致安全性及使用者體驗問題,
npx
會在安裝任何內容之前提示。使用 -y
或 --yes
選項取消此提示。
--no-install
選項已棄用,且將轉換為 --no
。
- 已移除 shell 回退功能,因為不建議使用。
-p
參數是 npm 中 --parseable
的簡寫,但 npx 中 --package
的簡寫。這會持續保留,但僅適用於 npx
可執行檔。
- 已移除
--ignore-existing
選項。已安裝的本機二進位檔始終存在於已執行的處理程序 PATH
中。
- 已移除
--npm
選項。npx
將始終使用其附帶的 npm
。
- 已移除
--node-arg
和 -n
選項。改用 NODE_OPTIONS
:例如,NODE_OPTIONS="--trace-warnings --trace-exit" npx foo --random=true
--always-spawn
選項是多餘的,因此已移除。
--shell
選項已替換為 --script-shell
,但為了向後相容性,已保留在 npx
可執行檔中。