@open-press/core
Workspace
OpenPress 用來將發現的 Press 資料夾分組到單一 workspace 資訊清單的內部元件。
<Workspace> 為系統生成的頂層邏輯分組元件,將自動偵測出的 <Press> 實體聚合為單一環境設定檔及輸出結構。
設計契約: 開發者不直接撰寫 <Workspace> 宣告。系統經由解析資料夾結構(press/*/press.tsx)自動建立此節點。
引擎內部建構之群組節點。將多個文件的操作配置、路由表單與部署參數統一管理。
import { Workspace } from "@open-press/core"; <Workspace name? children /> 內部屬性 (Props)
| Name | Type | Default | Description |
|---|---|---|---|
name | string | 專案全域識別稱呼,於輸出畫廊及 PDF metadata 中顯示。 | |
children required | Press[] | 解析出的文件實例清單,每一實例具唯一之 `slug`。 |
資料夾與路由結構
Workspace 架構支援依賴單一儲存庫與封裝層產生多個相關聯的獨立文件。
結構示範:多文件配置
my-launch/
├── package.json # 全域依賴與部署指令
└── press/
├── shared/ # 選擇性共用 source:素材、事實、元件
├── proposal/
│ ├── press.tsx # <Press slug="proposal">
│ ├── theme/ # proposal tokens 與 fonts
│ └── chapters/ # proposal 專屬 MDX
└── pitch-deck/
├── press.tsx # <Press slug="pitch-deck">
├── theme/ # deck tokens 與 fonts
└── layouts/ # pitch-deck 專屬組件
Workspace 系統影響
建置與操作環境 (Build & CLI)
| Name | Type | Default | Description |
|---|---|---|---|
路徑解析 | 路由 | 自動生成索引頁 `/` 以及對應的子文件路徑 `/proposal`、`/pitch-deck`。 | |
Per-Press 樣式綁定 | 主題 | 每個 Press 讀取自己的 `press/ | |
輸出產物結構 | 建置 | 個別產出 `public/openpress/ | |
建置連動 | 指令 | `npm run build` 強制驗證所有子文件,任何單點結構錯誤將中斷整個 Workspace 之輸出。 |
隔離邊界準則
符合以下條件之文件,應拆分至獨立實體之 Workspace(不同儲存庫或 monorepo 的不同 package),而非配置為共用 Workspace 之子文件:
- 缺乏共同上下文、品牌資產或程式碼共用情境。
- 同文件內容隨時間產生之版本控制快照(應交由 Git 分支管理)。
- 要求導向至互異部署目標或獨立轉接器之專案。
跨文件狀態管理
資料共用採取 ES Module 宣告模式,不引入專屬全域狀態庫:
// press/shared/data.ts
export const RAISE = { amount: "$8M", round: "Series A" };
// press/proposal/chapters/01-overview.mdx
import { RAISE } from "../../../data";
目標:{RAISE.round} 階段。