npm 運(yùn)行腳本 run-script

2021-10-29 10:51 更新

運(yùn)行任意包腳本

概要

npm run-script <command> [--silent] [-- <args>...]


alias: npm run

描述

這會從包的"scripts"對象運(yùn)行任意命令。如果沒有?"command"提供,它將列出可用的腳本。?run[-script]由 test、start、restart 和 stop 命令使用,但也可以直接調(diào)用。當(dāng)包中的腳本打印出來時,它們被分成生命周期(測試、啟動、重啟)和直接運(yùn)行的腳本。

從 開始npm@2.0.0,你可以在執(zhí)行腳本時使用自定義參數(shù)。getopt--使用?特殊選項來分隔選項的結(jié)尾。npm 會將 之后的所有參數(shù)直接傳遞給你的腳本:--

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

參數(shù)只會傳遞給之后指定的腳本npm run?,不會傳遞給任何前腳本或后腳本。 該env腳本是一個特殊的內(nèi)置命令,可用于列出腳本在運(yùn)行時可用的環(huán)境變量。如果包中定義了“env”命令,它將優(yōu)先于內(nèi)置命令。

除了 shell 預(yù)先存在的PATH,npm run添加?node_modules/.binPATH提供的腳本中。本地安裝的依賴項提供的任何二進(jìn)制文件都可以在沒有node_modules/.bin?前綴的情況下使用。例如,如果你的包中有一個devDependencyon?tap,你應(yīng)該寫:

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

代替

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

運(yùn)行你的測試。

你的腳本在其中運(yùn)行的實際 shell 取決于平臺。默認(rèn)情況下,在類 Unix 系統(tǒng)上它是/bin/sh命令,在 Windows 上它是cmd.exe.?所指的實際外殼/bin/sh也取決于系統(tǒng)。由于npm@5.1.0可以自定義與外殼script-shell配置。

腳本從模塊的根目錄運(yùn)行,無論您在調(diào)用npm run.?如果你希望腳本根據(jù)你所在的子目錄使用不同的行為,你可以使用?INIT_CWD環(huán)境變量,它保存你運(yùn)行npm run.

npm runNODE環(huán)境變量設(shè)置為執(zhí)行的node可執(zhí)行文件npm。此外,如果--scripts-prepend-node-path通過,則將node駐留的目錄添加到?PATH.?如果--scripts-prepend-node-path=auto傳遞(這是npmv3 中的默認(rèn)值),則僅當(dāng)nodePATH.

如果你嘗試在沒有node_modules目錄的情況下運(yùn)行腳本并且它失敗了,你將收到 run 警告npm install,以防萬一您忘記了。

你可以使用該--silent標(biāo)志來防止npm ERR!在出錯時顯示輸出。

你可以使用該--if-present標(biāo)志來避免在腳本未定義時以非零退出代碼退出。這使你可以在不中斷執(zhí)行鏈的情況下運(yùn)行可能未定義的腳本。

工作區(qū)支持

你可以使用workspaceworkspacesconfigs 以便"scripts"在指定工作區(qū)的上下文中從包的對象運(yùn)行任意命令。如果沒有"command"提供,它將列出每個配置的工作區(qū)的可用腳本。

給定一個配置了工作區(qū)的項目,例如:

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

假設(shè)在根級別package.json文件中正確設(shè)置了工作區(qū)配置?。例如:

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

并且每個配置的工作區(qū)都有一個配置的test腳本,我們可以使用workspaces配置在所有工作區(qū)中運(yùn)行測試:

npm test --workspaces

過濾工作區(qū) 還可以使用workspace?配置以及名稱或目錄路徑在單個工作區(qū)中運(yùn)行腳本:

npm test --workspace=a

workspace配置還可以以運(yùn)行在多個工作區(qū)的背景下,特定的腳本中指定多次。workspace在命令行中為配置定義值時,也可以-w用作簡寫,例如:

npm test -wa -wb

最后一條命令將test./packages/a./packages/b?包中運(yùn)行。

配置

workspace 工作區(qū)

  • 默認(rèn):
  • 類型:String(可多次設(shè)置)

允許在當(dāng)前項目的已配置工作區(qū)的上下文中運(yùn)行命令,同時通過僅運(yùn)行此配置選項定義的工作區(qū)進(jìn)行過濾。

workspace配置的有效值為:

  • 工作區(qū)名稱
  • 工作區(qū)目錄的路徑
  • 父工作區(qū)目錄的路徑(將導(dǎo)致選擇所有嵌套工作區(qū))

為該npm init命令設(shè)置時,可以將其設(shè)置為尚不存在的工作區(qū)的文件夾,以創(chuàng)建該文件夾并將其設(shè)置為項目中的全新工作區(qū)。

此值不會導(dǎo)出到子進(jìn)程的環(huán)境中。

workspaces 工作區(qū)

  • 默認(rèn)值:false
  • 類型:Boolean

啟用在所有已配置工作區(qū)的上下文中運(yùn)行命令。

此值不會導(dǎo)出到子進(jìn)程的環(huán)境中。

if-present 如果存在

  • 默認(rèn)值:false
  • 類型:Boolean

如果為真,NPM不會有錯誤代碼時退出run-script被調(diào)用未在定義腳本scripts的部分package.json。當(dāng)需要有選擇地運(yùn)行存在的腳本并在腳本失敗時失敗時,可以使用此選項。這很有用,例如,在運(yùn)行可能僅適用于其他通用 CI 設(shè)置中的某些構(gòu)建的腳本時。

ignore-scripts 忽略腳本

  • 默認(rèn)值:false
  • 類型:Boolean

如果為 true,則 npm 不會運(yùn)行 package.json 文件中指定的腳本。

請注意,明確用于運(yùn)行特定腳本的命令,例如?npm start,?npm stop,?npm restart,?npm test, 并且npm run-script?如果ignore-scripts已設(shè)置仍將運(yùn)行其預(yù)期腳本,但它們不會運(yùn)行任何前置或后置腳本。

script-shell

  • 默認(rèn)值:POSIX 系統(tǒng)上的“/bin/sh”,Windows 上的“cmd.exe”
  • 類型:nullString

用于腳本的 shell 與npm exec,npm runnpm init <pkg>命令一起運(yùn)行。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號