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

Gitlab构建Next.js应用时未从public目录生成图片缓存如何解决?

问题诱因
  • Next.js 设计上public目录为独立静态资源目录,默认不会被合并到.next构建产物目录中,你当前的打包规则仅包含.next目录和package.json,自然会遗漏public下的所有文件。
  • .next/cache/images是Next.js的运行时图片缓存目录,仅在两种场景生成:一是开发模式(next dev)运行中访问过图片,二是生产模式启动后收到图片访问请求。本地构建后你大概率主动启动过服务并访问过相关资源,因此生成了该目录;Gitlab CI流程仅执行了next build命令,没有启动服务也没有触发图片访问,所以不会生成该目录,属于Next.js的默认正常行为。
解决方案

修复public目录缺失问题

调整打包命令,将public目录纳入打包范围。例如原打包命令为:
tar -zcvf build-artifact.tar.gz .next package.json
修改后为:
tar -zcvf build-artifact.tar.gz .next package.json public

处理图片缓存目录不存在问题

根据你的实际需求选择方案:

  • 若需要预生成所有图片缓存:在CI构建步骤后新增临时服务启动+资源预访问步骤,使用curl、wget或者爬虫脚本批量访问站点所有用到图片的页面,触发Next.js生成图片缓存后再执行打包操作即可。
  • 若不需要预生成缓存:无需额外处理,生产环境部署启动后,首次访问对应图片时Next.js会自动生成该缓存目录及对应文件,不影响功能正常运行。如果需要持久化图片缓存,可单独给生产环境的.next/cache/images目录配置持久化存储规则即可。

可选适配优化

如果你的Next.js配置中开启了output: 'standalone'构建模式,还需要额外将.next/static目录纳入打包范围,否则部署后会缺失静态资源文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:09:01