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

Vue组件引用SVG Sprite出现net::ERR_ABORTED错误求助

Vue组件中SVG Sprite引用404错误的解决办法

你遇到的这个问题其实很常见,核心原因是Vue组件的资源路径解析逻辑和直接在index.html里写代码完全不同,下面我帮你拆解问题原因,再给出针对性的解决方案:

为什么会出现这个错误?

  • 相对路径基准不一致:index.html位于项目的根目录(或public目录),你写的../assets/img/sprites.svg是从根目录出发找资源;但Vue组件文件一般在src/components这类子目录里,组件模板里的相对路径是相对于组件文件所在目录,而不是项目根目录,这就导致实际请求的路径完全不对。
  • Webpack的资源处理规则:Vue单文件组件里的资源引用会被Webpack解析,但<use>标签的href属性如果是普通相对路径,Webpack并不会自动处理它,最终浏览器会按照当前页面的URL去请求资源,自然就找不到文件了。

可行的解决方案

方案1:使用项目根目录的绝对路径

把href的相对路径改成以/开头的绝对路径,这个/对应项目构建后的根目录(也就是public目录的位置):

<svg xmlns="http://www.w3.org/2000/svg">
  <use href="/assets/img/sprites.svg#pen"></use>
</svg>

这种方式最简单,只要你的sprites.svg确实放在public/assets/img目录下(Vue CLI项目默认会把public目录的资源原封不动复制到构建根目录),就能直接访问。

方案2:利用Vue CLI的路径别名

Vue CLI默认配置了@作为src目录的别名,如果你把assets目录放在src下,可以用~@来让Webpack正确解析路径:

<svg xmlns="http://www.w3.org/2000/svg">
  <use href="~@/assets/img/sprites.svg#pen"></use>
</svg>

这里的~是告诉Webpack这是一个模块路径,会自动帮你解析到src/assets/img/sprites.svg的正确位置。

方案3:内联SVG Sprite

如果你的Sprite内容不多,可以直接把sprites.svg里的<symbol>部分内联到组件模板里,这样彻底避免路径问题:

<svg xmlns="http://www.w3.org/2000/svg" style="display:none">
  <symbol id="pen" viewBox="-1585.104 -715.999 13.203 13.203">
    <title>Pen</title>
    <g>
      <path d="M3,13.45V16.2H5.75l8.111-8.111-2.75-2.75ZM15.988,5.962a.73.73,0,0,0,0-1.034L14.272,3.212a.73.73,0,0,0-1.034,0L11.9,4.554l2.75,2.75,1.342-1.342Z" transform="translate(-1588.104 -718.997)"/>
    </g>
  </symbol>
  <!-- 其他symbol -->
</svg>

<!-- 使用图标 -->
<svg xmlns="http://www.w3.org/2000/svg">
  <use href="#pen"></use>
</svg>

方案4:配置SVG Loader(进阶)

如果需要批量处理SVG资源,可以安装svg-sprite-loader,在Vue CLI的配置文件里设置规则,把SVG文件作为组件导入使用。这种方式适合大型项目,能更灵活地管理图标资源。

内容的提问来源于stack exchange,提问作者Bénédicte Lagouge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:32:07