Quellen
Die Felder eines Quelleneintrags, seine Refs, und die Optionen, die die URLs formen.
duxt.sources ist eine Liste von Quelleneinträgen; duxt.sourceOptions sagt,
wie daraus URLs werden. Beide werden zur Build-Zeit gelesen. Was sie erzeugen
und warum, steht in Quellen.
Ein Quelleneintrag
| Feld | Typ | Anmerkungen |
|---|---|---|
path | string | Ordner mit dem Markdown, relativ zur Repository-Wurzel |
repo | string | owner/name oder eine git-URL. Weggelassen heißt dieses Repository |
refs | Ref-Liste | Refs, die als Versionen veröffentlicht werden. Weggelassen heißt der aktuelle Checkout |
label | Text | Im Umschalter gezeigt und in der URL genutzt; standardmäßig der Ref |
slug | string | Das URL-Segment dieser Quelle. Wer eines nennt, beansprucht es — siehe unten |
status | Status | Lebenszyklus jeder Version, die dieser Eintrag veröffentlicht |
origin | { repo, ref? } | Wo von der Platte gelesene Seiten liegen, für Links zurück |
history | boolean | Die git-Historie dieser Quelle lesen |
locales | Locale-Liste | Sprachen, in denen diese Quelle vorliegt — siehe unten |
generated | Sektionsliste | Artefakte, die neben dem Markdown als Seiten veröffentlicht werden — siehe unten |
Zwei Felder sind leicht zu verwechseln und teuer, wenn man sie falsch setzt:
repolädt herunter,originverlinkt nur. Das eigene Repository inrepozu nennen lässt den Build den Checkout klonen, in dem er bereits steht.historykostet einen vollständigen Clone. Content klont ein entferntes Repository mit--depth 1, sein Checkout hält also einen Commit und jede Datei sieht aus, als hätte sie die Person geschrieben, die die Spitze gesetzt hat — falsche Daten, keine fehlenden. Das einzuschalten macht den Clone einmal vollständig. Eine von der Platte gelesene Quelle ist ohnehin ein vollständiger Checkout und wird unabhängig davon gelesen.
slug beansprucht ein Segment. Ein Segment bekommt eine Quelle sonst erst,
wenn die Liste mehr als ein Repository nennt — alles oder nichts, für die ganze
Seite. Eine Quelle, die einen eigenen slug schreibt, wird ohnehin darunter
ausgeliefert, und die Quellen ohne bleiben, wo sie sind. Genau das lässt eine
Sache unter /demo neben einer Dokumentation stehen, die die Wurzel behält.
Refs
Eine bloße Zeichenkette ist ein Branch. Ein Tag muss das sagen: git hält
Branches und Tags in getrennten Namensräumen, und einen Tag unter refs/heads
zu verlangen lässt den Build mit Could not find refs/heads/… scheitern.
refs: [
'main', // ein Branch
{ branch: 'next', status: 'upcoming' }, // derselbe, mit einem Lebenszyklus
{ tag: 'v2.0.0', label: 'v2' }, // ein Tag
'latest' // der neueste Semver-Tag, im Build aufgelöst
]
'latest' ist reserviert. Ein Branch, der wirklich latest heißt, braucht die
Form { branch }.
Locales
Weggelassen hat die Quelle eine Sprache und eine Collection. Aufgelistet wird jeder Eintrag zu einer eigenen Collection.
locales: [
'en-GB', // der Standard: docs/ selbst
'de', // docs/de/
{ locale: 'fr', path: 'translations/fr' }, // woanders in diesem Repository
{ locale: 'es', repo: 'acme/docs-es', path: 'docs' } // ein anderes Repository
]
Eine Zeichenkette ist ein Ordner innerhalb des path der Quelle. Die
Objektform überschreibt path, repo und ref allein für diese Sprache — und
genau das lässt eine Übersetzung in einem eigenen Repository leben, mit eigenen
Betreuern und eigenem Releaseplan.
Die Standard-Locale ist der Baum in path selbst und nimmt keinen Ordner.
Welche das ist, kommt aus sourceOptions.defaultLocale, und sie muss mit
i18n.defaultLocale übereinstimmen — der Build scheitert, wenn sie abweichen,
denn content.config.ts löst die Collections ohne Zugriff auf die
Nuxt-Konfiguration auf.
Ein Ref darf eigene locales tragen, die die der Quelle überschreiben, genau
wie status. Das ist die übliche Form: Die aktuelle Version ist übersetzt, die
dahinter nicht.
refs: [
{ tag: 'v2.0.0' }, // erbt die Locales der Quelle
{ tag: 'v1.0.0', locales: ['en-GB'] } // nur das Original
]
Benenne einen Ordner nach der Sprache, wo eine Region nichts hinzufügt:
docs/pt/ bedient sowohl pt-PT als auch pt-BR, weil eine Seite über ihre
Basissprache zurückfällt. Dieselbe Regel, der die Locale-Dateien der Ebene
folgen.
Status
| Wert | Bedeutet |
|---|---|
upcoming | Noch nicht veröffentlicht — kann sich noch ändern |
current | Die Dokumentation, die zu lesen ist |
maintained | Älter, weiterhin unterstützt |
deprecated | Älter, und der Leser sollte aktualisieren |
eol | Tot — wird gewarnt, und aus der Sitemap heraus |
Was jeder Wert eine Seite kostet, steht in URLs und Versionen.
Generierte Sektionen
generated listet Artefakte auf, die kein Markdown sind, und den Typ, der jedes
davon zu Seiten liest. Was der Mechanismus ist und welche zwei Richtlinien ein
Typ beantwortet, steht in
Generierte Sektionen; die Felder unten sind
dieselben, welcher Typ sie auch liest.
| Feld | Typ | Anmerkungen |
|---|---|---|
type | string | Der Registry-Schlüssel des Typs — changelog, openapi, ein eigener |
path | string | Das Artefakt, relativ zur eigenen Wurzel der Quelle |
label | string | Der Navbar-Eintrag und — slugifiziert — das URL-Segment |
slug | string | Überschreibt das Segment, das das Label ergeben würde |
options | Objekt | Die Knöpfe dieses Typs; jeder Typ prüft seine eigenen |
locales | Record<string, string> | Ein Artefakt pro Locale, nur von einem per-locale-Typ gelesen |
navigation | Platzierung | 'sections' (Standard), 'navigation' oder false |
icon | string | Fällt auf das Icon des Typs zurück |
path ist ein Pfad und nie eine URL. Bei einer Quelle, die Content klont,
ist er relativ zur Wurzel dieses Checkouts — das Artefakt reist also mit der
Version, zu der es gehört, eine Regel in beide Richtungen. Ein beliebiger Ort
würde erlauben, ein Artefakt von überall zu holen, und die Frage nach Netzwerk
zur Build-Zeit wieder öffnen, die sources bereits geschlossen hat.
label ist eine einfache Zeichenkette und kein übersetzter Text, aus
demselben Grund, aus dem das Label einer Version einer ist: Ein übersetzter Text
ist keine stabile URL.
options ist für alles außer dem Typ, der sie liest, undurchsichtig — eine
Granularität bedeutet einem Changelog etwas und einer API-Referenz nichts. Ein
Schlüssel, den der Typ nicht kennt, lässt den Build scheitern, statt ignoriert zu
werden: Eine falsch geschriebene Option ist eine Site, die still nicht bekommt,
was sie konfiguriert hat.
Quellenoptionen
| Feld | Standard | Was es tut |
|---|---|---|
showRepo | aus | Erzwingt ein Repository-Segment bei einem einzelnen Repository |
showVersion | aus | Erzwingt ein Versionssegment bei einer einzelnen Version |
defaultRef | der erste Ref | Der Ref, der ohne Versionspräfix ausgeliefert wird |
defaultLocale | die erste Locale | Die Locale, die aus path selbst ausgeliefert wird, ohne Ordner |
Das aufgelöste Manifest
Der Build macht aus der Liste oben duxt.resolvedSources, und das ist es, was
das Theme liest. useDuxtCollection() legt es offen; jeder Eintrag trägt den
Collection-Namen, das URL-prefix, repo, version, isDefault, locale,
isDefaultLocale, status, das Repository und den Ref, aus denen die Seiten
kamen, und ob seine history gelesen wurde.
Der Locale fehlt bewusst im prefix: i18n stellt ihn dem Pfad ohnehin voran,
jede Sprache einer Quelle teilt sich also ein Präfix und unterscheidet sich nur
durch die Collection.