You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于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

火山引擎 最新活动