OpenPress

@open-press/core

Workspace

OpenPress 用來將發現的 Press 資料夾分組到單一 workspace 資訊清單的內部元件。

<Workspace> 為系統生成的頂層邏輯分組元件,將自動偵測出的 <Press> 實體聚合為單一環境設定檔及輸出結構。

設計契約: 開發者不直接撰寫 <Workspace> 宣告。系統經由解析資料夾結構(press/*/press.tsx)自動建立此節點。

Component Impl

# <Workspace>

引擎內部建構之群組節點。將多個文件的操作配置、路由表單與部署參數統一管理。

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//theme/` source,並輸出自己的 CSS chunks。只有刻意共用 source 時才使用 `press/shared/`。
輸出產物結構 建置 個別產出 `public/openpress//document.json`,並統整於根目錄 `workspace.json` 資訊清單中。
建置連動 指令 `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} 階段。