Czczay.devv3.5.1
  • anasayfa
  • hakkımda
  • projeler
  • blog
  • eğitimler
  • iletişim
Mesaj

Furkan Özay.

Fullstack Developer & Eğitmen

  • İstanbul, Türkiye
  • contact@czay.dev

Keşfet

  • anasayfa
  • hakkımda
  • projeler
  • blog
  • eğitimler
  • iletişim

Kaynaklar

  • Liderlik tablosu
  • Site haritası
  • Çerez politikası
  • Geri bildirim

Bağlan

Mesaj gönder

© 2026 Furkan Özay — Tüm hakları saklıdır.

Next.js · Tailwind · oklch ile yapıldı

Blog/Next.js App Router ile MDX Kullanımı: Adım Adım TypeScript Rehberi
YazıNext.jsMDXTypeScript

Next.js App Router ile MDX Kullanımı: Adım Adım TypeScript Rehberi

Next.js App Router ve TypeScript ile MDX desteği eklemeyi ve kullanmayı aşama aşama anlatan rehber.

Furkan Özay

Furkan Özay

Fullstack & Eğitmen

29 Haziran 20254 dk
AI ile özetle
ChatGPTClaude
İçindekiler (9)

İçindekiler

  • 1. Gerekli Paketlerin Kurulumu
  • 2. next.config.js veya next.config.mjs Ayarları
  • 3. MDX Dosyalarını app/ İçinde Kullanmak
  • 4. MDX Components Bileşenini Oluşturun
  • 5. Highlight İçin Gerekli Paketi Kurun
  • 6. Örnek Globals CSS Düzenlemesi
  • 7. Layout Bileşenini Düzenleme
  • 8. İlk Blog Yazınızı Oluşturun
  • 9. Anasayfanızdan Blog Yazılarına Bağlantı Verin

MDX, Markdown dosyalarında React bileşenleri kullanmanıza olanak tanır. Next.js'in yeni App Router mimarisi ve TypeScript ile MDX desteğini projeye nasıl ekleyeceğinizi adım adım anlatıyorum.

✦

1. Gerekli Paketlerin Kurulumu

Öncelikle, projenize MDX desteği eklemek için gerekli paketleri yükleyin:

plaintext
pnpm add @next/mdx @mdx-js/loader @mdx-js/react @types/mdx

veya npm ile:

plaintext
npm install @next/mdx @mdx-js/loader @mdx-js/react @types/mdx
✦

2. next.config.js veya next.config.mjs Ayarları

App Router ile MDX desteği için Next.js konfigürasyonunuzu aşağıdaki gibi ayarlayın:

TypeScript
// next.config.ts
import type { NextConfig } from "next";
import createMDX from "@next/mdx";
 
const nextConfig: NextConfig = {
	pageExtensions: ["js", "jsx", "md", "mdx", "ts", "tsx"],
};
 
const withMDX = createMDX({});
 
export default withMDX(nextConfig);
✦

3. MDX Dosyalarını app/ İçinde Kullanmak

app/ klasöründe bir .mdx dosyası oluşturun. Örneğin:

app/page.mdx

plaintext
# Welcome to my MDX page!
 
This is some **bold** and _italics_ text.
 
This is a list in markdown:
 
- One
- Two
- Three
 
Checkout my React component:
 
```javascript
console.log("Hello, MDX!");
-```
 
✦

4. MDX Components Bileşenini Oluşturun

Next-MDX kullanımında, MDX dosyalarınızda React bileşenlerini kullanmak için bir bileşen oluşturmanız gerekir. Örneğin:

src/mdx-components.tsx:

📝Not

src dizini kullanmıyorsanız direkt root dizine oluşturmalısınız. Örneğin app/mdx-components.tsx gibi.

plaintext
import Link from "next/link";
import React, { ComponentPropsWithoutRef } from "react";
import type { MDXComponents } from "mdx/types";
import { highlight } from "sugar-high";
 
const components = {
  h1: (props: any) => (
    <h1 className="text-3xl font-bold mb-4" {...props}>
      {props.children}
    </h1>
  ),
  code: ({ children, ...props }: ComponentPropsWithoutRef<"code">) => {
    const codeHTML = highlight(children as string);
    return (
      <code
        dangerouslySetInnerHTML={{ __html: codeHTML }}
        {...props}
      />
    );
  },
};
 
export function useMDXComponents(): MDXComponents {
  return components;
}
 

5. Highlight İçin Gerekli Paketi Kurun

plaintext
pnpm add sugar-high

veya npm ile:

plaintext
npm install sugar-high
✦

6. Örnek Globals CSS Düzenlemesi

app/globals.css dosyanıza aşağıdaki stilleri ekleyin:

plaintext
@import "tailwindcss";
 
@theme {
  --font-family-sans: "Inter", sans-serif;
}
 
:root {
  --sh-class: #7aa2f7;
  --sh-sign: #89ddff;
  --sh-string: #9ece6a;
  --sh-keyword: #bb9af7;
  --sh-comment: #565f89;
  --sh-jsxliterals: #7aa2f7;
  --sh-property: #73daca;
  --sh-entity: #e0af68;
}
 
html {
  min-width: 360px;
  scrollbar-gutter: stable;
}
 
body {
  text-rendering: optimizeLegibility;
}
 
h1,
h2,
h3,
h4 {
  text-wrap: balance;
}
 
pre {
  background-color: #16161e;
  border-radius: 0.5rem;
  overflow-x: auto;
  padding: 1rem;
  margin: 1.5rem 0;
  line-height: 1;
}
 
pre::-webkit-scrollbar {
  display: none;
}
 
pre {
  -ms-overflow-style: none;
  scrollbar-width: none;
}
 
code {
  font-family: "Menlo", "Monaco", "Courier New", monospace;
  font-size: 14px;
  padding: 0.2em 0.4em;
  border-radius: 0.3em;
  background-color: var(--color-gray-100);
}
 
pre code {
  background-color: transparent;
  padding: 0;
  border: none;
  font-size: 14px;
  line-height: 1.5;
}
 
pre code > span .sh__token--identifier {
  color: white !important;
}
 
code:not(pre code) span {
  font-weight: 500;
  color: black !important;
}
 
@media (prefers-color-scheme: dark) {
  code {
    font-family: "Poppins", "Monaco", "Courier New", monospace;
    font-size: 14px;
    padding: 0.2em 0.4em;
    border-radius: 0.3em;
    background-color: var(--color-zinc-800);
  }
 
  code:not(pre code) span {
    color: var(--color-zinc-100) !important;
  }
}
 
pre code span {
  font-weight: 500;
}
 
hr {
  color: var(--color-gray-200);
}
 
/* Remove Safari input shadow on mobile */
input[type="text"],
input[type="email"] {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}
 
table {
  display: block;
  max-width: fit-content;
  overflow-x: auto;
  white-space: nowrap;
  text-align: left;
}
 
✦

7. Layout Bileşenini Düzenleme

app/layout.tsx dosyanızı aşağıdaki gibi düzenleyin:

plaintext
import type { Metadata } from "next";
import { Poppins } from "next/font/google";
import "./globals.css";
 
const font = Poppins({
  variable: "--font-poppins",
  subsets: ["latin"],
  weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
});
 
export const metadata: Metadata = {
  title: "Create Next App",
  description: "Generated by create next app",
};
 
export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  return (
    <html lang="en">
      <body className={`${font.variable} antialiased`}>
        <div className="min-h-screen flex flex-col justify-between pt-0 md:pt-8 p-8 dark:bg-zinc-950 bg-white text-gray-900 dark:text-zinc-200">
          <main className="max-w-[60ch] mx-auto w-full space-y-6">
            {children}
          </main>
        </div>
      </body>
    </html>
  );
}
 
 
✦

8. İlk Blog Yazınızı Oluşturun

app/blog/first-post/page.mdx dosyasını oluşturun ve aşağıdaki içeriği ekleyin:

plaintext
# İlk Blog Yazım
Bu, MDX ile oluşturduğum ilk blog yazım. MDX sayesinde Markdown ve React bileşenlerini bir arada kullanabiliyorum.
 
# h1 bileşeni
```tsx
Kod bölümü
-```
✦

9. Anasayfanızdan Blog Yazılarına Bağlantı Verin

app/page.mdx dosyanızı aşağıdaki gibi düzenleyin:

plaintext
 
# Welcome to my MDX page!
 
This is some **bold** and _italics_ text.
 
This is a list in markdown:
 
- One
- Two
- Three
 
Checkout my React component:
 
```javascript
console.log("Hello, MDX!");
-```
 
[My First Blog](blog/first-post)
 
Konuyu video anlatımıyla da takip edebilirsin.

YouTube

Konuyu video anlatımıyla da takip edebilirsin.

Videoyu izle →

✦

Ek Kaynaklar:

  • Next.js App Router + MDX Dokümantasyonu
  • MDX Resmi Sitesi

İçindekiler

İçindekiler

  • 1. Gerekli Paketlerin Kurulumu
  • 2. next.config.js veya next.config.mjs Ayarları
  • 3. MDX Dosyalarını app/ İçinde Kullanmak
  • 4. MDX Components Bileşenini Oluşturun
  • 5. Highlight İçin Gerekli Paketi Kurun
  • 6. Örnek Globals CSS Düzenlemesi
  • 7. Layout Bileşenini Düzenleme
  • 8. İlk Blog Yazınızı Oluşturun
  • 9. Anasayfanızdan Blog Yazılarına Bağlantı Verin

Yazı süresi

4 dk

Bu içeriği beğendiysen

Yeni yazı çıktığında haberin olsun. Spam yok.

Bu yazıyı faydalı bulduysan paylaşabilirsin.

X'te PaylaşLinkedIn
Furkan Özay

Furkan Özay

Fullstack Developer & Eğitmen

Modern web teknolojileriyle ürünler inşa eder, öğrencilere yazılım öğretir. React, Next.js ve Node.js ekosisteminde uzman.

HakkımdaEğitimlerİletişim

Yorumlar

Yorum yapmak için GitHub hesabınla giriş yapman yeterli. Tartışmalar GitHub Discussions'ta tutulur.

Benzer yazılar

Aynı etiketleri paylaşan içerikler

Tümü
  • Next.jsForm Validation

    Next.js Form Validasyon Yöntemleri: Client ve Server Side Doğrulama Rehberi

    1 Tem 202512 dk
  • Next.jsReact Server Components

    Next.js use cache: React Server Components için Yeni Cache Sistemi

    15 Haz 20254 dk
  • TypeScriptJavaScript

    Typescript ile Tip Güvenli Geliştirme

    10 Haz 20253 dk
Önceki yazıGit Temelleri: Sürüm Kontrolüne Giriş ve Pratik Kullanım25 Haz 2025Sonraki yazıNext.js Form Validasyon Yöntemleri: Client ve Server Side Doğrulama Rehberi1 Tem 2025