Alustamine
See juhend aitab seadistada tühjast kaustast dokumentatsioonisaidi, kasutades Onedocs. Kui sul on juba Next.js projekt, jäta olemasolevad failid vahele ja võrdle ülejäänuid.
Eeltingimused
- Node.js 20.9 või uuem (nõutav versioonile Next.js 16)
- Next.js 16 App Routeriga, React 19.2 või uuem
- Tailwind CSS v4 (eelseadistus Onedocs CSS impordib
tailwindcss)
Fumadocs UI 16 toetab ainult Next.js 16 ja React 19.2, seega vanemad Next.js või React versioonid ei tööta, kuigi paketi onedocs metaandmetes on need endiselt loetletud (#5).
Paigaldamine
Onedocs ei sisalda komplektis Next.js ega Fumadocs. Need on partner-sõltuvused, seega paigalda need selle kõrvale:
npm install onedocs fumadocs-core fumadocs-mdx fumadocs-ui lucide-react@0.562 next react react-dom
npm install -D tailwindcss @tailwindcss/postcss typescript @types/react @types/react-dom @types/node
Jätke lucide-react@0.562 pin alles. onedocs 0.1.27 määrab lucide-react ^0.562.0-i partneriks ning ilma pin-ita installib npm lucide-react 1.x ja katkestab töö ERESOLVE veaga (#1).
Samad paketid töötavad ka pnpm-i, yarn-i ja bun-iga.
Lisa skriptid Next.js faili package.json:
{
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
}
}
Projekti struktuur
Lõpptulemus näeb välja selline:
your-project/
├── content/
│ └── docs/
│ ├── index.mdx
│ └── meta.json
├── public/
│ └── fonts/
│ └── InterVariable.woff2
├── src/
│ ├── app/
│ │ ├── layout.tsx
│ │ ├── page.tsx
│ │ ├── globals.css
│ │ └── docs/
│ │ ├── layout.tsx
│ │ └── [[...slug]]/
│ │ └── page.tsx
│ └── lib/
│ └── source.ts
├── onedocs.config.ts
├── source.config.ts
├── next.config.mjs
├── postcss.config.mjs
├── tsconfig.json
└── package.json
Loome nüüd kõik failid.
Konfiguratsioonifailid
onedocs.config.ts
Sinu peamine konfiguratsioonifail. Nõutav on ainult title; ülejäänu kohta vaata Konfigureerimine.
import { defineConfig } from "onedocs/config";
export default defineConfig({
title: "My Docs",
description: "Documentation for my project",
nav: {
github: "username/repo",
},
});
source.config.ts
Annab Fumadocs MDX-ile teada, kus sinu sisu asub. See on ainus koht, kus sisukausta asukoht määratakse:
import { defineDocs } from "fumadocs-mdx/config";
export const docs = defineDocs({
dir: "content/docs",
});
next.config.mjs
Lubab MDX töötlemise:
import { createMDX } from "fumadocs-mdx/next";
const withMDX = createMDX();
/** @type {import('next').NextConfig} */
const config = {};
export default withMDX(config);
Fumadocs MDX loob source.config.ts põhjal .source/ kausta, kui Next.js käivitub. Lisage .source faili .gitignore.
postcss.config.mjs
Käivitab Tailwind CSS v4, millele põhineb eelseadistus Onedocs CSS:
export default {
plugins: {
"@tailwindcss/postcss": {},
},
};
tsconfig.json
Allolevad näited impordivad moodulist @/, seega suuna see asukohta src/:
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}
Next.js lisab sellesse faili esimesel käivitamisel ülejäänud vajalikud kompilaatori valikud, kui käivitad next dev või next build.
Lähtekoodi seadistus
src/lib/source.ts
Laadib dokumentatsiooni sisu:
import { loader } from "fumadocs-core/source";
import { docs } from "../../.source/server";
export const source = loader({
baseUrl: "/docs",
source: docs.toFumadocsSource(),
});
Rakenduse failid
src/app/layout.tsx
Sinu juurpaigutus:
import type { Metadata } from "next";
import { RootProvider } from "fumadocs-ui/provider/next";
import { FontHead } from "onedocs";
import "./globals.css";
export const metadata: Metadata = {
title: "My Docs",
description: "Documentation for my project",
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en" suppressHydrationWarning>
<head>
<FontHead />
</head>
<body className="antialiased">
<RootProvider>{children}</RootProvider>
</body>
</html>
);
}
Moodul RootProvider paketist Fumadocs UI pakub otsingudialoogi ning heledat ja tumedat kujundust. FontHead laadib Inter Variable'i fondi ette asukohast /fonts/InterVariable.woff2 ja määrab selle lehe fondiks. Onedocs ei sisalda fondifaili: laadi InterVariable.woff2 alla Interi väljalasetest ja paiguta see asukohta public/fonts/. Ilma selleta kasutatakse süsteemi sans-serif-fonti.
Selle metaandmestiku loomiseks oma konfiguratsiooni põhjal vaata createMetadata jaotises API viide.
src/app/globals.css
Impordi eelseadistus CSS:
@import "onedocs/css/preset.css";
@source "./**/*.tsx";
@source "../../content/**/*.mdx";
Eelseadistus laadib Tailwind CSS, Fumadocs UI stiilid ja Onedocs paigutusstiilid. @source teed on suhtelised asukoha globals.css suhtes, seega viitavad need kaks rida asukohale src/app/ ja projekti juurkaustas olevale kaustale content/.
src/app/page.tsx
Avaleht. HomePage renderdab konfiguratsiooni põhjal avavaate, funktsioonid ja jaluse:
import { HomePage } from "onedocs";
import config from "../../onedocs.config";
export default function Home() {
return <HomePage config={config} packageName="my-package" />;
}
packageName lisab avavaatele paigalduskäsud pakettidele npm, yarn, pnpm ja bun. Jäta see välja, kui sinu projekt pole pakett.
src/app/docs/layout.tsx
Dokumentatsiooni paigutus külgribaga:
import { DocsLayout } from "onedocs";
import type { ReactNode } from "react";
import { source } from "@/lib/source";
import config from "../../../onedocs.config";
export default function Layout({ children }: { children: ReactNode }) {
return (
<DocsLayout config={config} pageTree={source.pageTree}>
{children}
</DocsLayout>
);
}
src/app/docs/[[...slug]]/page.tsx
Üksikud dokumentatsioonilehed:
import { source } from "@/lib/source";
import { DocsPage, mdxComponents } from "onedocs";
import { notFound } from "next/navigation";
export default async function Page(props: {
params: Promise<{ slug?: string[] }>;
}) {
const params = await props.params;
const page = source.getPage(params.slug);
if (!page) notFound();
const MDX = page.data.body;
return (
<DocsPage toc={page.data.toc}>
<MDX components={mdxComponents} />
</DocsPage>
);
}
export async function generateStaticParams() {
return source.generateParams();
}
export async function generateMetadata(props: {
params: Promise<{ slug?: string[] }>;
}) {
const params = await props.params;
const page = source.getPage(params.slug);
if (!page) notFound();
return {
title: page.data.title,
description: page.data.description,
};
}
Sisu
content/docs/index.mdx
Iga lehe esiosas peavad olema title. description on valikuline:
---
title: Introduction
description: What this project does.
---
Welcome to the docs. Components such as `<Callout>` work without imports; see [Components](/docs/components).
content/docs/meta.json
Määrab külgriba järjestuse:
{
"pages": ["index"]
}
Lisa leht, luues veel ühe faili .mdx ja loetledes selle nime failis pages.
Käivitamine
Käivita arendusserver:
npm run dev
Avaleht asub aadressil http://localhost:3000 ja dokumentatsioon aadressil http://localhost:3000/docs.
Loo tootmisversioon:
npm run build
Seejärel lisa otsing, saidikaart ja llms.txt jaotises SEO ja otsing.