Darba sākšana
Šajā pamācībā no tukšas mapes tiek izveidota dokumentācijas vietne ar Onedocs. Ja jums jau ir Next.js projekts, izlaidiet jau esošos failus un salīdziniet pārējos.
Priekšnosacījumi
- Node.js 20.9 vai jaunāka versija (nepieciešama Next.js 16)
- Next.js 16 ar App Router, React 19.2 vai jaunāka versija
- Tailwind CSS v4 (Onedocs CSS sākotnējā konfigurācija importē
tailwindcss)
Fumadocs UI 16 atbalsta tikai Next.js 16 un React 19.2, tāpēc vecākas Next.js vai React versijas nedarbojas, lai gan pakotnes onedocs metadatos tās joprojām ir norādītas (#5).
Instalēšana
Onedocs neietver Next.js vai Fumadocs. Tās ir vienādranga atkarības, tāpēc instalējiet tās blakus šai pakotnei:
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
Paturiet piesprausto lucide-react@0.562 versiju. onedocs 0.1.27 deklarē lucide-react ^0.562.0 kā vienādranga atkarību, un bez piespraustās versijas npm instalē lucide-react 1.x un apstājas ar ERESOLVE kļūdu (#1).
Tās pašas pakotnes darbojas ar pnpm, yarn vai bun.
Pievienojiet Next.js skriptus failā package.json:
{
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
}
}
Projekta struktūra
Lūk, kāda būs projekta struktūra:
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
Izveidosim katru failu.
Konfigurācijas faili
onedocs.config.ts
Galvenais konfigurācijas fails. Obligāts ir tikai title; pārējo skatiet sadaļā Konfigurācija.
import { defineConfig } from "onedocs/config";
export default defineConfig({
title: "My Docs",
description: "Documentation for my project",
nav: {
github: "username/repo",
},
});
source.config.ts
Norāda Fumadocs MDX, kur atrodas saturs. Šī ir vienīgā vieta, kur tiek iestatīta satura mape:
import { defineDocs } from "fumadocs-mdx/config";
export const docs = defineDocs({
dir: "content/docs",
});
next.config.mjs
Iespējo MDX apstrādi:
import { createMDX } from "fumadocs-mdx/next";
const withMDX = createMDX();
/** @type {import('next').NextConfig} */
const config = {};
export default withMDX(config);
Fumadocs MDX ģenerē mapi .source/ no source.config.ts, kad tiek palaists Next.js. Pievienojiet .source pie .gitignore.
postcss.config.mjs
Palaiž Tailwind CSS v4, uz kura balstīta sākotnējā konfigurācija Onedocs CSS:
export default {
plugins: {
"@tailwindcss/postcss": {},
},
};
tsconfig.json
Tālākajos piemēros tiek importēts no @/, tāpēc piesaistiet to src/:
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}
Pirmoreiz palaižot next dev vai next build, Next.js šim failam pievieno pārējās nepieciešamās kompilatora opcijas.
Avota iestatīšana
src/lib/source.ts
Ielādē dokumentācijas saturu:
import { loader } from "fumadocs-core/source";
import { docs } from "../../.source/server";
export const source = loader({
baseUrl: "/docs",
source: docs.toFumadocsSource(),
});
Lietotnes faili
src/app/layout.tsx
Saknes izkārtojums:
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>
);
}
RootProvider no Fumadocs UI nodrošina meklēšanas dialogu, kā arī gaišo un tumšo tēmu. FontHead ielādē Inter Variable fontu no /fonts/InterVariable.woff2 un iestata to kā lapas fontu. Onedocs nepiegādā fonta failu: lejupielādējiet InterVariable.woff2 no Inter laidumiem un ievietojiet to mapē public/fonts/. Bez tā tekstā tiek izmantots sistēmas sans-serif fonts.
Lai šos metadatus veidotu no konfigurācijas, skatiet sadaļu createMetadata, kas atrodas API uzziņu materiālā.
src/app/globals.css
Importējiet sākotnējo konfigurāciju CSS:
@import "onedocs/css/preset.css";
@source "./**/*.tsx";
@source "../../content/**/*.mdx";
Sākotnējā konfigurācija ielādē Tailwind CSS, Fumadocs UI stilus un izkārtojuma Onedocs stilus. Ceļi @source ir attiecībā pret globals.css, tāpēc šīs divas rindas norāda uz src/app/ un uz projekta saknes mapes mapi content/.
src/app/page.tsx
Sākumlapa. HomePage no jūsu konfigurācijas renderē galveno bloku, iespējas un kājeni:
import { HomePage } from "onedocs";
import config from "../../onedocs.config";
export default function Home() {
return <HomePage config={config} packageName="my-package" />;
}
packageName galvenajam blokam pievieno instalēšanas komandas priekš npm, yarn, pnpm un bun. Izlaidiet to, ja jūsu projekts nav pakotne.
src/app/docs/layout.tsx
Dokumentācijas izkārtojums ar sānjoslu:
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
Atsevišķas dokumentācijas lapas:
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,
};
}
Saturs
content/docs/index.mdx
Katras lapas frontmatter sadaļā jābūt norādītam title. description nav obligāts:
---
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
Nosaka sānjoslas secību:
{
"pages": ["index"]
}
Pievienojiet lapu, izveidojot vēl vienu .mdx failu un norādot tā nosaukumu failā pages.
Palaišana
Palaidiet izstrādes serveri:
npm run dev
Sākumlapa ir pieejama adresē http://localhost:3000, bet dokumentācija — http://localhost:3000/docs.
Izveidojiet produkcijas versiju:
npm run build
Pēc tam pievienojiet meklēšanu, vietnes karti un llms.txt sadaļā SEO un meklēšana.