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

Next.js引入图片在styled-components背景图使用时报ERR_UNKNOWN_URL_SCHEME错误

报错原因

Next.js 13及以上版本中,本地图片资源导入后默认返回的是包含src、width、height属性的对象,而非直接的资源URL字符串。
你使用Image组件时组件会自动读取对象的src属性完成渲染,但直接将导入对象传入background-image: url()时,对象会被自动转为字符串,最终生成包含src:前缀、宽高后缀的非法URL,触发net::ERR_UNKNOWN_URL_SCHEME报错。

解决方案

方案1:直接取导入对象的src属性

修改样式文件中传入url()的变量,主动读取导入图片对象的src属性即可:

// styles.tsx 改动部分
.swiper-button-prev {
  /* 新增.src后缀 */
  background-image: url(${Left.src});
  /* 其余样式保持不变 */
}
.swiper-button-next {
  /* 新增.src后缀 */
  background-image: url(${Right.src});
  /* 其余样式保持不变 */
}

如果TypeScript出现类型报错,可以在项目类型声明文件(如env.d.ts或next-env.d.ts)中添加svg资源的类型定义:

declare module '*.svg' {
  const content: {
    src: string;
    height: number;
    width: number;
  };
  export default content;
}

方案2:将静态资源放入public目录

将src/assets下的svg文件移动到项目根目录的public/assets文件夹下,无需导入资源,直接写绝对路径即可:

// 不需要再写 import Left/Right 导入语句
.swiper-button-prev {
  background-image: url('/assets/left.svg');
}
.swiper-button-next {
  background-image: url('/assets/right.svg');
}

方案3:修改webpack配置让svg导入直接返回URL

如果你希望所有svg导入都直接返回URL字符串,可以在next.config.js中添加webpack配置:

/** @type {import('next').NextConfig} */
const nextConfig = {
  webpack(config) {
    config.module.rules.push({
      test: /\.svg$/i,
      type: 'asset/resource',
    });
    return config;
  },
}

module.exports = nextConfig

配置完成后重启项目,原有写法background-image: url(${Left})即可正常运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:06:03