Package.json 慣例
以下適用於 package.json
檔案的「scripts」區段。
名稱
npm 腳本名稱必須僅包含小寫字母、以 :
分隔部分、以 -
分隔單字,以及以 +
分隔檔案副檔名。每個部分名稱應該是完整的英文單字(例如 coverage
而非 cov
)或全部小寫的著名首字母縮寫詞(例如 wasm
)。
以下是 ABNF 中的提案摘要。
name = life-cycle / main target? option* ":watch"?
life-cycle = "prepare" / "preinstall" / "install" / "postinstall" / "prepublish" / "preprepare" / "prepare" / "postprepare" / "prepack" / "postpack" / "prepublishOnly"
main = "build" / "lint" ":fix"? / "release" / "start" / "test" / "fetch"
target = ":" word ("-" word)* / extension ("+" extension)*
option = ":" word ("-" word)*
word = ALPHA +
extension = ( ALPHA / DIGIT )+
順序
腳本名稱必須依照字母順序出現在 package.json 檔案中。本文檔中概述的其他慣例可確保字母順序與邏輯分組一致。
主要腳本名稱
除了npm 生命週期腳本之外,所有腳本名稱都必須以以下名稱之一開頭。
建置
從原始碼和/或資料產生一組檔案的腳本必須以 build
開頭命名。
如果套件包含任何 build:*
腳本,則可以有一個名為 build
的腳本。如果是,則應該產生與個別執行每個 build
腳本相同的輸出。它必須產生執行這些腳本的輸出的子集。
提取
從外部資料或資源產生一組檔案的腳本必須以 fetch
開頭命名。
如果套件包含任何 fetch:*
腳本,則可以有一個名為 fetch
的腳本。如果是,則應該產生與個別執行每個 fetch
腳本相同的輸出。它必須產生執行這些腳本的輸出的子集。
發佈
具有公開副作用(發佈網站、提交至 Git 等)的腳本必須以 release
開頭。
程式碼檢查
靜態分析檔案的腳本(主要是,但不限於執行 eslint
本身)必須以 lint
開頭命名。
如果套件包含任何 lint:*
腳本,則應該有名為 lint
的腳本,並且它必須執行如果單獨呼叫每個 lint:*
腳本會執行的所有檢查。
如果可以修正,程式碼檢查工具除非腳本包含 :fix
修飾詞(請參閱下文),否則不得套用修正。
啟動
start
腳本用於啟動伺服器。 在撰寫本文時,沒有任何 ESLint 套件有多個 start
腳本,因此不需要讓 start
具有任何修飾詞。
測試
執行程式碼以確保實際行為符合預期行為的腳本必須以 test
開頭命名。
如果套件包含任何 test:*
腳本,則應該有名為 test
的腳本,並且它必須執行如果單獨呼叫每個 test:*
腳本會執行的所有測試。
測試腳本不應該包含程式碼檢查。
測試腳本應在可能的情況下回報測試涵蓋率。
修飾詞
可以在上述標準腳本名稱後附加一個或多個下列修飾詞。 如果目標具有修飾詞,它們必須按照以下顯示的順序排列(例如 lint:fix:js:watch
而不是 lint:watch:js:fix
)
修正
如果程式碼檢查工具可以修正找到的問題,請新增一個腳本副本,並在結尾附加 :fix
,該副本也會修正。
目標
正在執行的動作目標名稱。 在 build
腳本的情況下,它應該識別建置成品,例如「javascript」或「css」或「website」。 在 lint
或 test
腳本的情況下,它應該識別要檢查或測試的項目。 在 start
腳本的情況下,它應該識別正在啟動的伺服器。
目標可以參考受影響的檔案副檔名列表(例如 cjs
或 less
),並以 +
分隔。 如果有多個副檔名,則列表應該按字母順序排列。 當檔案副檔名具有變體時(例如 CommonJS 的 cjs
和 ESM 的 mjs
),可以使用副檔名的通用部分,而不是明確列出所有變體(例如 js
而不是 cjs+jsx+mjs
)。
目標不應參考執行動作的工具名稱(eleventy
、webpack
等)。
選項
不符合其他修飾詞的其他選項。
監看
如果腳本監看檔案系統並回應變更,請在腳本名稱中新增 :watch
。