NextJS本地运行正常,生产构建出现ModuleNotFoundError无法解析图片资源报错
错误根因
- NextJS 生产构建的webpack路径解析规则比本地开发环境更严格,
public作为静态资源根目录,导入时不应该携带public层级的相对路径前缀 - 存在小概率是
.gitignore规则过滤了图片文件,导致相关资源没有被推送到远程仓库,生产构建环境拉取不到对应文件 - 本地文件系统(Windows/macOS)大小写不敏感,生产部署环境为Linux大小写敏感,如果代码中写的文件名和实际文件名大小写不一致,也会出现本地正常生产报错的情况
修复步骤
- 首先验证图片是否已提交:检查本地项目的
.gitignore文件,确认没有匹配*.jpg或者public/images/的过滤规则,且public/images/posts/our-new-home/目录下的所有图片都已经提交到main分支 - 核对所有图片的文件名大小写,确保代码中导入的路径和实际文件的大小写完全一致
- 修正图片导入路径:将
our-new-home.tsx中所有图片的导入路径移除../../public前缀,修改示例如下:
原导入代码:
import ShellyCrying from "../../public/images/posts/our-new-home/shelly-crying.jpg";
修正后:
import ShellyCrying from "/images/posts/our-new-home/shelly-crying.jpg";
- 可选优化方案:使用NextJS官方提供的
next/image组件实现图片性能优化,无需提前导入资源,直接传入路径即可,使用示例:
import Image from 'next/image' // 组件内调用 <Image src="/images/posts/our-new-home/shelly-crying.jpg" alt="Shelly和她的捷达车告别" width={800} height={600} className="" />
内容的提问来源于stack exchange,提问作者Bryan Oyloe
相关产品推荐
相关产品推荐

