关于Docusaurus从数据生成静态页面的技术咨询
关于Docusaurus从数据生成静态页面的技术咨询
没问题,Docusaurus完全支持从JSON这类数据源生成静态页面,我给你梳理几种常用的实现方式,以及相关的开源参考方向:
一、实现方法
1. 预生成Markdown/MDX文件
你可以写个简单的Node.js脚本,读取JSON数据后自动生成对应的.md或.mdx文件,放到Docusaurus的文档或页面目录下。比如你有个products.json存了产品信息,脚本可以循环遍历每个产品,生成包含产品名称、详情、参数的Markdown文件,Docusaurus构建时就会把这些文件转换成静态页面。
举个简单的脚本片段思路:
const fs = require('fs'); const products = require('./products.json'); products.forEach(product => { const content = `--- title: ${product.name} sidebar_label: ${product.name} --- ## ${product.name} ### 产品描述 ${product.description} ### 技术参数 - 规格:${product.specs.size} - 重量:${product.specs.weight} `; fs.writeFileSync(`./docs/products/${product.slug}.md`, content); });
运行这个脚本后,Docusaurus就能识别这些生成的文档,构建出对应的静态页面了。
2. 用MDX+React组件动态渲染
如果不需要单独生成每个页面,而是在一个页面里展示数据列表或详情,MDX是个很好的选择。你可以在MDX文件里引入自定义React组件,直接导入JSON数据并动态渲染内容。
比如创建一个ProductTable.js组件:
import products from '../data/products.json'; export default function ProductTable() { return ( <table> <thead> <tr> <th>产品名称</th> <th>价格</th> </tr> </thead> <tbody> {products.map(product => ( <tr key={product.id}> <td>{product.name}</td> <td>${product.price}</td> </tr> ))} </tbody> </table> ); }
然后在MDX文件里引入这个组件:
import ProductTable from '../components/ProductTable'; # 产品列表 以下是我们的全部产品: <ProductTable />
这样构建出来的页面就会动态展示JSON里的产品数据了。
二、相关开源项目参考
GitHub上有不少开源项目用了类似的方案,比如:
- 一些开源CLI工具的文档站点:会把命令参数、说明存在JSON中,通过脚本生成对应的文档页面,方便维护和更新;
- 开源组件库:很多组件库会把组件的属性、示例代码存在JSON或YAML文件里,然后生成组件详情页,保证文档和组件代码的一致性;
你可以在GitHub搜索“docusaurus generate pages from json”,能找到很多实际的项目示例,看看他们的脚本或组件实现方式,参考起来更直观。
备注:内容来源于stack exchange,提问作者Gleb Svechnikov




