網站導覽

基本概念

單一存儲庫

讓每個應用程式擁有自己的專案脈絡,並在工作區套件之間共用 CSS 詞彙。

本頁目錄

#概覽

讓每個應用程式擁有獨立的專案邊界,再透過匯入共用 CSS 詞彙。語言服務、程式碼 lint 與建置整合,都能使用同一份應用程式專屬的專案脈絡。

匯入 @master/css 的專案 CSS 進入點,或宣告 Master CSS 相依性的套件,都能識別一個工作區。這些邊界獨立於套件管理工具的工作區清單。請從各應用程式的專案目錄開始建置,並將 CSS 進入點保留在該目錄。僅屬於套件管理工具的同一工作區,不會建立共用的 Master CSS 設定。

共用原始碼,保留兩個專案脈絡

匯入會共用定義。每個應用程式仍擁有自己的進入點、覆寫、原始碼選取範圍與產生輸出。

文字說明
  1. 共用定義. 兩個應用程式進入點都匯入 styles/shared.css。
  2. Admin 脈絡. projects/admin/index.css 將 color-primary 覆寫為 #4f46e5。它的 bg-primary 類別使用這個紫色值。
  3. Shop 脈絡. projects/shop/index.css 將 color-primary 覆寫為 #0f766e。它的 bg-primary 類別獨立使用這個青綠色值。

#一個專案,一個工作區

每個 package.json 專案都有一個 Master CSS 工作區:一份專案 manifest 圖、原始碼掃描脈絡,以及一組工具整合。

獨立應用程式請使用分開的套件專案,例如 projects/admin 與 projects/shop。各自擁有 CSS 進入點與應用程式設定:

  • projects
    • admin
      • package.json
      • eslint.config.js
      • index.css
    • shop
      • package.json
      • eslint.config.js
      • index.css
  • package.json
  • styles
    • shared.css

在每個應用程式完成對應的框架設定。從該應用程式目錄啟動開發伺服器及正式環境建置,讓產生的 CSS、原始碼掃描、診斷與編輯器狀態都對齊同一專案根目錄。

將共用定義放在專用原始檔中。此範例由共用檔提供 token,而每個應用程式自行匯入完整的 Master CSS 進入點:

styles/shared.css
@theme {  --color-primary: #123456;}

#共用 CSS 定義

在每個工作區匯入共用的專案 CSS 檔案,再於其後加入工作區專屬的定義。

projects/admin/index.css
@import '@master/css';@import '../../styles/shared.css';@theme {  --color-primary: #4f46e5;}@layer components {  .app-shell {    background-color: var(--color-surface-base);    min-height: 100vh;  }}

共用匯入之後的定義,可以覆寫共用 token 與 utility。同一串接層的原生元件規則,依 CSS 原始碼順序排列。

shop 匯入相同的共用原始碼,再選擇自己的顏色:

projects/shop/index.css
@import '@master/css';@import '../../styles/shared.css';@theme {  --color-primary: #0f766e;}

兩個應用程式都能使用相同類別:

<p class="flex items-center gap-xs text-sm">  <span aria-hidden="true" class="h(8) w(8) pill bg-primary"></span>  Workspace</p>

admin 建置會輸出自己的 #4f46e5 主色值;shop 則輸出 #0f766e。變更 admin 的覆寫,不應改變 shop 輸出。建置兩個應用程式,檢查各自產生樣式表中的 --color-primary,確認邊界正常運作。

共用檔案定義詞彙;每個應用程式進入點決定匯入內容。應用程式專用的掃描指令與傳遞選擇,請留在所屬應用程式中,不要放入共用樣式表。


#納入共用元件原始碼

共用 CSS 匯入提供的是定義。共用元件內的類別字串,仍需要送到使用端應用程式的掃描器。Vite 可以掃描匯入的工作區模組;從應用程式內啟動的 CLI 建置,則不會沿 JavaScript 匯入追查同層套件。

若元件位於 packages/ui,請在每個使用端應用程式的 CSS 進入點加入 @source "../../packages/ui/**/*.{js,jsx,ts,tsx}";。這個明確路徑會將共用原始碼納入應用程式建置。它相對於宣告該指令的 CSS 檔案,因此進入點移動時也要調整路徑。

來源路徑以宣告它的樣式表為起點

樹狀圖描繪同一個檔案系統。從 apps/shop 匯入樣式表,不會讓其中撰寫的 @source 模式改以該應用程式為基準。

文字說明
  1. 儲存庫包含 styles/shared.css 與 styles/views/card.html。shared.css 宣告 @source "./views/*.html"。
  2. 相對模式從 styles/shared.css 解析,因此即使使用它的應用程式在 apps/shop 執行,仍會納入 styles/views/card.html。
  3. 掃描器透過程式另外傳入的 cwd 選項有自己的契約;本圖說明的是撰寫於 CSS 的指令。

已安裝的相依套件目錄不會自動掃描。打包後的元件函式庫可能需要範圍精確的 @source 模式,指向其發布的原始檔。請挑選只出現在該套件中的類別,檢查應用程式正式環境輸出。原始碼邊界列出了排除規則與其他來源類型。

共用 CSS 與共用標記是獨立輸入

匯入共用 CSS,不會自動選取所有同層元件檔案進行掃描。

文字說明

CSS 定義檔與元件原始檔,分別透過匯入與原始碼選取兩條路徑進入使用端應用程式。

#擴大共用範圍前,先驗證邊界

從各應用程式目錄執行正式環境建置。變更一個區域覆寫後,檢查兩份輸出:admin 的值應只在 admin 改變。接著加入只由共用元件使用的完整類別,確認使用端應用程式會輸出該規則。

若缺少 token,請檢查 CSS 匯入圖。若定義可用,但共用元件的 utility 缺少,請檢查原始碼選取範圍。這是兩項獨立輸入:匯入共用 CSS,不會自動納入所有同層元件檔案。

詞彙需要版本化套件契約時,請參閱撰寫套件。以掃描類別名稱定義各應用程式掃描的檔案,再透過最佳化 CSS 傳遞決定可移除的原生規則。