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

Next.js 13.5.1中next/image组件失效,img标签正常原因咨询

Next.js 13.5.1 Image组件加载失败原因及解决方案

从你遇到的问题来看,核心是Next.js 13.2.4到13.5.1版本间next/image组件的规则和配置发生了变化,导致组件失效但原生img标签正常,具体原因和解决思路如下:

可能的原因

  • App Router下的配置变更:13.5.x版本中App Router成为默认推荐方案,原Pages Router中使用的images.domains配置已被弃用,改用images.remotePatterns来授权远程图片域名。如果你的图片是远程资源,未配置remotePatterns会导致Next.js拒绝处理图片请求,而原生img不受此限制,直接请求资源所以能显示。
  • 必填属性缺失:App Router模式下,next/image组件强制要求传入width和height属性(或使用fill属性配合父容器定位),13.2.4版本可能对这一要求更宽松。如果你的代码里没指定这些属性,组件会报错无法加载。
  • 本地图片路径问题:App Router下本地图片必须放在public目录,引用路径不能带public前缀(比如/logo.png而非/public/logo.png),如果路径写错,Image组件无法找到资源,但原生img可能通过相对路径或完整路径正常加载。

解决方案

  1. 修正next.config.js配置
    如果是远程图片,添加remotePatterns授权域名:

    /** @type {import('next').NextConfig} */
    const nextConfig = {
      images: {
        remotePatterns: [
          {
            protocol: 'https', // 根据你的图片协议调整
            hostname: '图片所在的域名',
            pathname: '/**', // 授权该域名下所有路径的图片
          },
        ],
      },
    }
    
    module.exports = nextConfig
    

    如果不需要图片优化(仅临时调试),可以开启unoptimized:

    const nextConfig = {
      images: {
        unoptimized: true,
      },
    }
    
  2. 补全Image组件必填属性
    两种方式二选一:

    • 直接指定宽高:
      <Image src="/your-image.png" alt="描述文本" width={200} height={200} />
      
    • 使用fill属性配合父容器定位(适合响应式场景):
      <div style={{ position: 'relative', width: '100%', height: 300 }}>
        <Image src="/your-image.png" alt="描述文本" fill objectFit="cover" />
      </div>
      
  3. 检查本地图片路径
    确保图片放在项目根目录的public文件夹下,引用时直接写根路径(比如/avatar.jpg),不要包含public。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:41:07