🦔
opennext nextra
init
pnpm create cloudflare@latest opennext-nextra --framework=next --platform=workers
nextra
pnpm add next react react-dom nextra nextra-theme-docs
next.config.ts
import nextra from 'nextra'
// Set up Nextra with its configuration
const withNextra = nextra({
// ... Add Nextra-specific options here
})
// Export the final Next.js config with Nextra included
export default withNextra({
// ... Add regular Next.js options here
})
// added by create cloudflare to enable calling `getCloudflareContext()` in `next dev`
import { initOpenNextCloudflareForDev } from '@opennextjs/cloudflare';
initOpenNextCloudflareForDev();
mdx-components.tsx
import { useMDXComponents as getThemeComponents } from 'nextra-theme-docs' // nextra-theme-blog or your custom theme
import type { MDXComponents } from 'nextra/mdx-components'
// Get the default MDX components
const themeComponents = getThemeComponents()
// Merge components
export function useMDXComponents(components: MDXComponents) {
return {
...themeComponents,
...components
}
}
app/(nextra)/layout.tsx
import { Footer, Layout, Navbar } from "nextra-theme-docs";
import { Banner, Head } from "nextra/components";
import { getPageMap } from "nextra/page-map";
import "nextra-theme-docs/style.css";
import { ReactNode } from "react";
export const metadata = {
// Define your metadata here
// For more information on metadata API, see: https://nextjs.org/docs/app/building-your-application/optimizing/metadata
};
const banner = <Banner storageKey="some-key">Nextra 4.0 is released 🎉</Banner>;
const navbar = (
<Navbar
logo={<b>Nextra</b>}
// ... Your additional navbar options
/>
);
const footer = <Footer>MIT {new Date().getFullYear()} © Nextra.</Footer>;
export default async function RootLayout({ children }: { children: ReactNode}) {
return (
<Layout
banner={banner}
navbar={navbar}
pageMap={await getPageMap()}
docsRepositoryBase="https://github.com/shuding/nextra/tree/main/docs"
footer={footer}
// ... Your additional layout options
>
{children}
</Layout>
);
}
turbopack 無効化
package.json
"scripts": {
"dev": "next dev",
Discussion