儲存庫
文件
工作區

工作區

工作區是單一儲存庫的組成區塊。您新增到單一儲存庫的每個應用程式和套件都會位於其自己的工作區內

工作區由您的套件管理員管理,因此請務必先設定好。

設定工作區

若要使用工作區,您必須先向套件管理員宣告其檔案系統位置。

我們建議使用常見的慣例,在頂層建立 apps/packages/ 目錄。這並非必要,而只是建議的目錄結構。

apps 資料夾應包含可啟動應用程式的 Workspace,例如 Next.js(在新分頁中開啟)Svelte(在新分頁中開啟) 應用程式。

packages 資料夾應包含應用程式或其他套件使用的套件 Workspace。

將您想要設定為 Workspace 的資料夾加入根目錄 package.json 檔案中的 workspaces 欄位。此欄位包含一個以 Glob 形式表示的 Workspace 資料夾清單

{
  "name": "my-monorepo",
  "version": "1.0.0",
  "workspaces": [
    "docs",
    "apps/*",
    "packages/*"
  ]
}
my-monorepo
├─ docs
├─ apps
│  ├─ api
│  └─ mobile
├─ packages
│  ├─ tsconfig
│  └─ shared-utils
└─ sdk

在上述範例中, my-monorepo/apps/my-monorepo/packages/ 內的所有目錄都是 Workspace,而 my-monorepo/docs 目錄本身也是一個 Workspace。 my-monorepo/sdk/ 不是 Workspace,因為它未包含在 Workspace 設定中。

命名 Workspace

每個 Workspace 都有獨特的名稱,指定在其 package.json

{
  "name": "shared-utils"
}

此名稱用於

  1. 指定應將套件安裝到哪個 Workspace套件安裝
  2. 在其他 Workspace 中使用此 Workspace
  3. 發布套件:它會在 npm 上以您指定的 name 發布

你可以使用 npm 組織或使用者範圍,以避免與 npm 上現有套件發生衝突。例如,你可以使用 @mycompany/shared-utils

相互依賴的工作區

要在另一個工作區內使用工作區,你需要使用其名稱指定它為依賴項。

例如,如果我們希望 apps/docs 匯入 packages/shared-utils,我們需要在 apps/docs/package.json 內將 shared-utils 新增為依賴項。

{
  "dependencies": {
    "shared-utils": "*"
  }
}

* 讓我們能參考依賴項的最新版本。如果我們的套件版本變更,它讓我們免於需要提升我們的依賴項版本。

就像一般套件一樣,我們需要在之後從根目錄執行 install。安裝後,我們可以使用工作區,就像它從 node_modules 中的任何其他套件一樣。請參閱我們的 關於共用程式碼的章節 以取得更多資訊。

管理工作區

在單一儲存庫中,當您從根目錄執行 install 命令時,會發生幾件事

  1. 檢查您已安裝的工作區依賴項
  2. 任何工作區都會 建立符號連結(在新分頁中開啟)node_modules,表示您可以像一般套件一樣匯入它們
  3. 其他套件會下載並安裝至 node_modules

這表示每當您新增/移除工作區,或變更它們在檔案系統中的位置時,您需要重新執行 install 命令,以重新設定您的工作區。

不需要在套件內的原始碼每次變更時重新安裝,只有在您以某種方式變更工作區的位置(或組態)時才需要。

如果您遇到問題,您可能必須刪除儲存庫中的每個 node_modules 資料夾,並重新執行 install 以修正它。