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

Next.js中在Markdown文章引用public文件夹图片的问题

Next.js + gray-matter 博客图片引用问题解决办法

问题根源

你当前Markdown中图片路径写了/public/images/triangle.jpg,但Next.js的public文件夹是静态资源的根目录,访问静态资源时不需要带上/public前缀。

直接解决方案

修改Markdown里的图片路径,去掉/public前缀:

![triangle](/images/triangle.jpg)

为什么这样可行?

Next.js会将public文件夹下的资源映射到网站根路径,比如public/images/triangle.jpg对应的实际访问URL是/images/triangle.jpg,所以直接使用根相对路径即可正确加载图片。

批量处理旧文章(可选)

如果有大量已发布的Markdown文章都使用了/public前缀,不想手动逐个修改,可以在getStaticProps中批量替换路径:

export const getStaticProps: GetStaticProps = async ({ params }) => {
  const fileName = fs.readFileSync(`posts/${params.slug}.md`, 'utf-8')
  const { data: frontmatter, content } = matter(fileName)
  // 全局替换所有 /public/ 为 /
  const processedContent = content.replace(/\/public\//g, '/')
  return {
    props: {
      frontmatter,
      content: processedContent,
    },
  }
}

渲染注意事项

如果你使用remark/rehype等工具将Markdown转为HTML,确保工具不会修改图片路径。比如使用remark-html时,会直接将Markdown图片语法转为<img src="/images/triangle.jpg" alt="triangle">,Next.js可以正常识别这个路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:35:20