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

Vite React项目生产构建中Glob导入失效问题求助

问题分析

开发环境中import.meta.glob返回的是文件原始相对路径,直接fetch能正常访问;但生产构建时,Vite会对静态资源做路径重写和哈希处理,原目录结构的md文件会被打包到dist/assets下且文件名带哈希,此时再用原始路径fetch必然出现404。你之前添加的external配置完全不适用于这个场景——它是用来排除外部依赖的,和内部静态资源无关。

解决方案

直接通过import.meta.glob导入md文件内容,而非获取路径后用fetch请求,具体有两种实现方式:

方式一:同步导入(适合文件数量少的场景)

const useGetChangelogs = () => {
  // 直接导入所有md文件的原始文本内容,eager: true 表示同步加载
  const changelogModules = import.meta.glob("~/changelogs/*.md", { eager: true, as: "raw" });
  
  // 按文件路径倒序排序,提取文本内容
  const changelogs = Object.entries(changelogModules)
    .sort(([pathA], [pathB]) => pathB.localeCompare(pathA))
    .map(([, content]) => content as string);

  return changelogs;
};

方式二:异步导入(适合文件数量多,需要懒加载的场景)

const useGetChangelogs = () => {
  const [changelogs, setChangelogs] = useState<string[]>([]);

  useEffect(() => {
    const loadChangelogs = async () => {
      // 获取所有md文件的异步导入函数,as: "raw" 指定导入文本内容
      const changelogImports = import.meta.glob("~/changelogs/*.md", { as: "raw" });
      // 按文件路径倒序排序
      const sortedPaths = Object.keys(changelogImports).sort((a, b) => b.localeCompare(a));
      // 批量执行导入并获取内容
      const contents = await Promise.all(
        sortedPaths.map(path => changelogImports[path]())
      );
      setChangelogs(contents);
    };

    loadChangelogs().catch(err => console.error(err));
  }, []);

  return changelogs;
};
后续确认
  1. 保留Vite配置中的assetsInclude: ["**/*.md"],确保md文件被识别为静态资源
  2. 移除之前添加的错误external配置,避免影响资源打包

内容的提问来源于stack exchange,提问作者Chambers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:25:00