You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用React列出public/files目录下的Markdown文件?

解决方案

根据你使用的构建工具/框架,有几种可扩展的方式自动列出public/files/下的Markdown文件,无需手动维护JSON:

1. 使用Vite的import.meta.glob

Vite原生支持通过glob模式匹配文件,构建时会自动扫描匹配的文件,新增文件无需修改代码:

// 在你的组件中
const mdFiles = import.meta.glob('/public/files/*.md', { eager: false })
// 提取文件名列表
const fileList = Object.keys(mdFiles).map(filePath => {
  return filePath.split('/').pop()
})

2. 使用Webpack的require.context

如果你用的是基于Webpack的项目(比如Create React App),可以用require.context静态扫描文件:

// 注意路径要根据组件位置调整,这里假设组件在src目录下,public/files在项目根目录
const mdContext = require.context('../../public/files', false, /\.md$/)
const fileList = mdContext.keys().map(item => item.replace('./', ''))

3. 静态站点生成框架(Next.js/Nuxt.js)

这类框架允许在服务端/构建阶段直接用Node.js的文件系统模块读取:

Next.js 示例

import fs from 'fs'
import path from 'path'

export async function getStaticProps() {
  // 拼接public/files的绝对路径
  const dirPath = path.join(process.cwd(), 'public/files')
  // 读取目录下所有文件,过滤出.md后缀的
  const fileList = fs.readdirSync(dirPath).filter(file => file.endsWith('.md'))
  
  return {
    props: { fileList }
  }
}

// 在组件中接收fileList并渲染
export default function MdFileList({ fileList }) {
  return (
    <ul>
      {fileList.map(file => (
        <li key={file}>{file}</li>
      ))}
    </ul>
  )
}

这些方案的核心都是构建时自动扫描文件,新增Markdown文件后,重新构建就能自动出现在列表里,完全不需要手动维护文件列表,满足可扩展性要求。

内容的提问来源于stack exchange,提问作者Gökhan Gündüz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:50:54