图片路径必须使用以html入口文件为基准的相对路径,禁用绝对路径和冗余./前缀,命名统一小写连字符,构建工具需显式配置sources处理自定义属性,动态路径须交由运行时逻辑处理。

图片路径必须用相对路径,且以 HTML 入口文件为基准
所有 src、href 中的图片路径,必须相对于当前 HTML 文件所在位置书写。比如 index.html 在项目根目录,而 logo.png 也在根目录,就写 <img src="logo.png">;如果 index.html 在 /pages/ 下,图片在 /assets/,就得写 <img src="../assets/logo.png">。
绝对路径(如 /assets/logo.png)看似方便,但部署到子路径(如 https://example.com/my-app/)时,浏览器会强行往根下找,直接 404。./ 前缀多数冗余,./logo.png 和 logo.png 效果一致,还多敲字符、易出错。
- 路径中禁止空格和中文,URL 编码后调试困难,且部分构建工具会报错
- 统一使用小写字母 + 连字符命名,如
user-avatar.png,避免大小写敏感问题(尤其在 Linux 服务器上) - 开发阶段可运行
Array.from(document.images).filter(i => i.naturalWidth === 0)快速定位加载失败的图片
第三方图片资源不走构建流程,需显式排除
Webpack 的 html-loader 默认只处理标准属性(如 img[src]、link[href]),遇到自定义组件里的 data-src 或 srcset 就会漏掉——构建后路径没被重写,上线即 404。
必须显式配置 sources 对象,在 list 中声明规则:
sources: {
list: [
{ tag: "img", attribute: "src", type: "src" },
{ tag: "img", attribute: "srcset", type: "srcset" },
{ tag: "my-gallery", attribute: "data-cover", type: "src" }
],
urlFilter: (attr, path) => !path.startsWith("https://") && !path.startsWith("//")
}
-
type: "srcset"必须单独配,不会继承自src规则 -
urlFilter用来跳过 CDN 资源(如https://cdn.example.com/icon.svg),避免误打包或路径解析失败 - 若启用
scriptingEnabled: true,<script></script>里的字符串字面量(如"./icons/close.png")也会被尝试解析——生产环境建议保持false
组件内图片不能靠 JS 拼接路径,要走静态分析入口
在 React/Vue/Angular 组件模板里写 <img :src="'/images/' + name + '.png'"> 或 <img iconpath>,构建阶段无法解析变量,html-loader 直接跳过,导致路径未被重写、哈希未注入、上线 404。
- 静态资源路径必须是字面量字符串,如
<img src="./icons/home.png"> - 动态图片需求(如用户上传头像、后台返回图标路径)应改用
fetch()+URL.createObjectURL(),或服务端渲染时注入完整 URL - 若必须运行时拼接,把逻辑移到组件的
useEffect/mounted钩子中,用document.getElementById()或 ref 手动设置src,避开构建期解析
图片格式与响应式策略要收敛到构建层,不在 HTML 里硬编码
HTML 中不应出现多个同图不同格式的 <source></source> 或一堆 srcset 字符串。这类逻辑应由构建工具统一处理:Vite 插件自动转 WebP,Webpack 的 image-minimizer-webpack-plugin 压缩并生成 srcset,再注入到最终 HTML。
手写 <picture></picture> 容易遗漏 fallback、type 错误、sizes 不匹配视口——维护成本高,且每次新增图片都要复制粘贴一套。
- 推荐约定:组件中只写最简
<img src="./icon.svg" alt="...">,其余交由构建流程补全 - SVG 图标优先内联(
<svg>...</svg>),避免 HTTP 请求,也规避路径管理问题 - 对性能敏感场景(如首屏大图),用
loading="lazy"显式控制,但不要依赖它替代构建期优化
真正难的不是怎么写路径,而是让所有开发者遵守同一套“路径坐标系”——HTML 入口在哪,就从哪开始算。一旦有人偷偷用 /static/ 或 ./assets/ 混着来,整个静态资源链就断了,且问题往往在部署后才暴露。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











