Lưu ý cho AI khi viết Fumadocs
Quy tắc MDX an toàn, tránh lỗi acorn/Node khi tạo tài liệu
Mục tiêu
- Tránh các lỗi Build Error: "Error evaluating Node.js code" và "Could not parse expression with acorn".
- Viết MDX theo chuẩn đơn giản, ổn định cho hệ thống docs (Fumadocs + Next.js).
Lỗi thường gặp (và cách tránh)
- Dùng ngoặc nhọn/array trực tiếp trong văn bản làm MDX hiểu là biểu thức JS.
- Sai: Args:
{ id, name? }(không bọc backticks) -> sẽ gây lỗi parse. - Đúng: Args:
{ id, name? }(bọc trong backticks) hoặc đặt trong khối code.
- Sai: Args:
- Viết mảng/object trong văn bản thường.
- Sai: Returns:
[{ ...product, unit }](không bọc backticks) -> sẽ gây lỗi. - Đúng: Returns:
[{ ...product, unit }]hoặc khối code.
- Sai: Returns:
- Dùng JSX/Component không có sẵn trong theme hoặc chưa import.
- Ví dụ: viết
<Something/>sẽ bị parse như component. Hãy bọc trong backticks.
- Ví dụ: viết
- Ký tự đặc biệt, font/encoding lạ.
- Hạn chế "ngoặc kép thông minh", mũi tên đặc biệt. Dùng ASCII đơn giản (", ->, -).
- Tiếng Việt có dấu vẫn OK; lỗi thường do ngoặc nhọn không bọc code, không phải do dấu.
- Frontmatter không hợp lệ (phần đầu file giữa hai dòng ---).
- Chỉ để các cặp key: value dạng chuỗi đơn giản: title, description.
- Không chèn object/array vào frontmatter.
Quy tắc MDX an toàn (KISS)
- Bọc mọi mẩu có
{},[],<>trong code inline bằng backticks, ví dụ:{ id }. - Với đoạn dài, dùng khối code 3 dấu backtick (fenced code block) và chỉ định ngôn ngữ nếu cần (ví dụ: ts, json).
- Dùng danh sách gạch đầu dòng đơn giản, không lồng quá sâu.
- Không chèn JS/TS động trong MDX (ví dụ:
{items.map(...)}); tài liệu nên tĩnh. - Giữ nội dung thuần Markdown; chỉ dùng component có sẵn trong theme.
Mẫu chuẩn đề xuất
Frontmatter mẫu:
---
title: Tên trang
description: Mô tả ngắn gọn
---Nội dung mẫu:
- Args:
{ id, name? } - Returns:
[{ _id, name }]
// Khối code ví dụ (nếu cần)
type CreateArgs = { name: string; note?: string };Checklist trước khi commit
- File có frontmatter mở/đóng bằng
---đầy đủ. - Không còn
{},[],<>trần trong văn bản (đã bọc backticks). - Không dùng JSX lạ; nếu có, chắc chắn component tồn tại.
- Dùng ASCII cho ký hiệu đặc biệt (-> thay vì mũi tên đặc biệt). Tiếng Việt có dấu vẫn OK.
- Build thử cục bộ: chạy dev server và mở trang docs vừa thêm/sửa.
Khắc phục nhanh khi gặp lỗi
- Xác định dòng báo lỗi trong log (số dòng + file MDX).
- Kiểm tra có ký tự
{,},[,],<,>nằm ngoài backticks không. - Tạm thời bọc toàn bộ đoạn có ký tự đặc biệt vào khối code để loại trừ nguyên nhân.
- Nếu file có nhiều biểu tượng đặc biệt, thay bằng ASCII trước, rồi thêm dần lại.