Multi-Projekt-Workspaces

Workspaces ermöglichen es Ihnen, mehrere unabhängige Dokumentationsprojekte aus einem einzigen Repository zu bauen und zu deployen. Jedes Unterprojekt behält seine eigenen Konfigurationsoptionen und erbt gleichzeitig globale Standards, die im Workspace-Root definiert sind.

docs.example.com/  # Haupt-Produktdokumentation
docs.example.com/sdk/  # SDK-API-Referenz
docs.example.com/cli/  # CLI-Tooling-Leitfaden

Verzeichnis-Einrichtung

Organisieren Sie Ihr Repository in separate Projekt-Unterverzeichnisse. Geteilte statische Assets und globale Workspace-Konfigurationen befinden sich im Repository-Root:

my-docs/
├── assets/  # Geteilte statische Assets (von allen Projekten vererbt)
├── main-docs/
│   ├── docmd.config.json  # Projektkonfiguration (überschreibt Root-Standards)
│   └── docs/  # Hauptprojekt Markdown-Inhalte
├── sdk-docs/
│   ├── docmd.config.json  # SDK-Projektkonfiguration
│   └── docs/  # SDK-Projekt Markdown-Inhalte
├── docmd.config.json  # Workspace-Root-Konfiguration
└── package.json

Workspace-Konfigurationsschema

Die Datei docmd.config.json im Root verwendet den Schlüssel workspace zur Deklaration von Projekten. Top-Level-Parameter (z. B. theme, menubar, logo) dienen als globale Standards für alle Unterprojekte:

docmd.config.json
{
  "workspace": {
    "projects": [
      { "prefix": "/",    "src": "main-docs", "title": "Docs" },
      { "prefix": "/sdk", "src": "sdk-docs",  "title": "SDK Reference" }
    ],
    "switcher": {
      "enabled": true,
      "position": "sidebar-top"
    }
  },
  "theme": { "name": "default", "appearance": "system" },
  "logo": {
    "light": "assets/logo-dark.svg",
    "dark": "assets/logo-light.svg"
  },
  "menubar": [
    { "text": "GitHub", "url": "https://github.com/docmd-io/docmd", "external": true }
  ]
}

workspace-Optionen

Eigenschaft Typ Beschreibung
projects Array Liste von Projekteinträgen. Genau ein Projekt muss prefix: "/" zuweisen.
switcher Object Steuert Position und Rendering des Projekt-Umschaltmenüs.

Felder der Projekteinträge

Feld Typ Erforderlich Beschreibung
prefix String Ja URL-Routenpräfix. Verwenden Sie "/" für das Root-Projekt.
src String Ja Unterverzeichnispfad mit Projektinhalten und optionaler docmd.config.json.
title String Nein Im Projekt-Umschaltmenü angezeigter Name.

Übersteuerungen auf Projektebene

Unterprojekte können eigene docmd.config.json-Manifeste führen. Auf Projektebene definierte Parameter überschreiben die Standards des Workspace-Roots:

docmd.config.json
{
  "title": "SDK Reference",
  "src": "docs",
  "plugins": {
    "search": {},
    "openapi": {}
  }
}

Wenn ein Unterprojekt keine lokale Konfigurationsdatei hat, wendet der Compiler automatisches Zero-Config-Routing mit den Workspace-Standards an.

Konfigurations-Kaskadierungshierarchie

Konfigurationsoptionen kaskadieren über ein 3-stufiges Rangfolgemodell:

Stufe Priorität Beschreibung
Root-Workspace-Konfiguration Basis-Standard Wird zuerst auf alle Workspace-Projekte angewendet.
Projektkonfiguration (docmd.config.json) Höher Überschreibt Root-Workspace-Standards für dieses spezifische Projekt.
Projektnavigation (navigation.json) Höchste Priorität Hat immer Vorrang beim Rendering der Sidebars.
Navigations-Vorrang

Ein navigation.json-Manifest auf Projektebene hat immer Vorrang vor jedem globalen navigation-Array, das in der Root-Workspace-Konfiguration definiert ist.

Das Projekt-Umschaltmenü UI

Der Projekt-Umschalter rendert eine barrierefreie Dropdown-Komponente, die es Lesern ermöglicht, zwischen Workspace-Unterprojekten zu wechseln:

docmd.config.json
{
  "workspace": {
    "switcher": {
      "enabled": true,
      "position": "sidebar-top"
    }
  }
}
Position Rendering-Ort
sidebar-top (Standard) Oben in der Sidebar angeheftet, über den Navigationslinks.
sidebar-bottom Unten in der Sidebar angeheftet.
options-menu In das Header-Optionsmenü neben Suche und Theme-Schaltern integriert.

Der Projekt-Umschalter wird automatisch gerendert, wenn zwei oder mehr Workspace-Projekte deklariert sind.

Asset-Verwaltung

  • Geteilte Assets: Platzieren Sie Logos, Favicons und globales benutzerdefiniertes CSS im Root-Verzeichnis assets/. Alle Workspace-Projekte erben diese Assets während der Entwicklung und Build-Kompilierung.
  • Projekt-Assets: Unterprojekte können lokale assets/-Unterverzeichnisse führen. Projektspezifische Assets überschreiben geteilte Root-Assets bei Dateinamenskonflikten.

Entwicklungs- & Build-Befehle

Entwicklungsserver
Produktions-Build

Führen Sie den Multi-Projekt-Dev-Server aus:

npx @docmd/core dev

Baut alle Workspace-Projekte und stellt sie auf einem einzigen HTTP-Port bereit. Dateibearbeitungen lösen gezielte Hot-Updates pro Projekt aus, ohne den gesamten Workspace neu zu bauen.

Generieren Sie das Produktionspaket:

npx @docmd/core build

Gibt ein einzelnes konsolidiertes statisches Verzeichnis aus. Alle Projekte kompilieren in ihre jeweiligen Unterpfade, ohne dass Reverse-Proxy-Setups erforderlich sind.

Workspace-Einschränkungen

  1. Root-Projekt-Anforderung: Genau ein Projekt muss prefix: "/" zuweisen.
  2. Eindeutige Routenpräfixe: Jedes Projekt muss eine eindeutige URL-Präfix-Zeichenkette verwenden.
  3. Root-Level out-Steuerung: Das Ausgabeverzeichnis (out) wird ausschließlich auf Workspace-Root-Ebene konfiguriert; Unterprojekt-Konfigurationen dürfen out nicht angeben.

Konfigurations-Schema-Migration

Um ältere Workspace-Definitionen auf das moderne workspace-Schemaformat zu aktualisieren, führen Sie den automatisierten CLI-Migrationshelfer aus:

Automatisches Konfigurations-Upgrade

Führen Sie npx @docmd/core migrate --upgrade aus, um alte Konfigurationsdateien automatisch auf das v0.9.0-Workspace-Schema umzuschreiben.