網站導覽
目錄
工作區
選擇 CLI 版本
目錄
說明
工作區是一個通用的術語,用於指稱 npm cli 中的一組功能,這些功能提供支援,讓您可以在單一頂層根套件中從您的本機檔案系統管理多個套件。
這組功能可大幅簡化處理本機檔案系統中連結套件的工作流程。它會自動將連結程序納入 npm install
的一部分,並移除手動使用 npm link
的需求,才能將參考加入應該符號連結到目前 node_modules
資料夾的套件。
我們也會在 npm install
中將這些套件自動連結到單一工作區,表示它是 package.json
workspaces
設定中明確定義的當前本機檔案系統內的巢狀套件。
定義工作區
工作區通常透過 package.json
檔案的 workspaces
屬性定義,例如
{"name": "my-workspaces-powered-project","workspaces": ["packages/a"]}
假設上述 package.json
範例位於當前工作目錄 .
,其中包含一個名為 packages/a
的資料夾,而該資料夾本身包含一個 package.json
,定義一個 Node.js 套件,例如
.+-- package.json`-- packages+-- a| `-- package.json
在這個當前工作目錄 .
執行 npm install
後預期的結果是 packages/a
資料夾會連結到當前工作目錄的 node_modules
資料夾。
以下是 npm install
後的範例,假設檔案和資料夾結構與先前範例相同
.+-- node_modules| `-- a -> ../packages/a+-- package-lock.json+-- package.json`-- packages+-- a| `-- package.json
開始使用工作區
你可以使用 npm init 自動執行定義新工作區所需的步驟。例如,在已經定義 package.json
的專案中,你可以執行
npm init -w ./packages/a
這個指令會建立遺失的資料夾和新的 package.json
檔案(如果需要),同時也會正確設定根專案 package.json
的 "workspaces"
屬性。
將相依性加入工作區
你可以使用 workspace
設定 直接新增/移除/更新工作區的相依性。
例如,假設有以下結構
.+-- package.json`-- packages+-- a| `-- package.json`-- b`-- package.json
如果你想要新增一個名為 abbrev
的相依性(從註冊表中)作為你的工作區 a 的相依性,你可以使用工作區設定告訴 npm 安裝程式應該將該套件新增為所提供工作區的相依性
npm install abbrev -w a
注意:其他安裝指令,例如 uninstall
、ci
等,也會尊重所提供的 workspace
設定。
使用工作區
根據 Node.js 處理模組解析的具體方式,你可以透過宣告的 package.json
name
來使用任何已定義的工作區。繼續上述範例,我們也可以建立一個 Node.js 腳本,它會需要工作區 a
範例模組,例如
// ./packages/a/index.jsmodule.exports = 'a'// ./lib/index.jsconst moduleA = require('a')console.log(moduleA) // -> a
使用以下方式執行時
node lib/index.js
這說明了 node_modules
解析的本質如何允許 工作區 為每個 工作區 啟用可攜式工作流程,以便以一種容易 發布 這些嵌套工作區供其他地方使用的方式進行要求。
在工作區的環境中執行指令
你可以使用 workspace
組態選項在組態工作區的內容中執行命令。此外,如果你的目前目錄在工作區中,workspace
組態會隱含設定,而 prefix
會設定為根工作區。
以下是關於如何在嵌套工作區的內容中使用 npm run
命令的快速範例。對於包含多個工作區的專案,例如
.+-- package.json`-- packages+-- a| `-- package.json`-- b`-- package.json
透過使用 workspace
選項執行命令,可以在特定工作區的內容中執行給定的命令。例如
npm run test --workspace=a
你也可以在工作區中執行命令。
cd packages/a && npm run test
這兩個都會執行在 ./packages/a/package.json
檔案中定義的 test
指令碼。
請注意,你也可以在命令列中多次指定這個引數,以鎖定多個工作區,例如
npm run test --workspace=a --workspace=b
或為「packages」資料夾中的每個工作區執行命令
npm run test --workspace=packages
也可以使用 workspaces
(複數)組態選項來啟用相同的行為,但會在 所有 組態工作區的內容中執行該命令。例如
npm run test --workspaces
會在 ./packages/a
和 ./packages/b
中執行 test
指令碼。
命令會按照它們在 package.json
中出現的順序在每個工作區中執行
{"workspaces": [ "packages/a", "packages/b" ]}
執行順序與以下不同
{"workspaces": [ "packages/b", "packages/a" ]}
忽略遺失的指令碼
並非所有工作區都必須實作使用 npm run
指令執行的腳本。
透過使用 --if-present
旗標執行指令,npm 會忽略缺少目標腳本的工作區。
npm run test --workspaces --if-present