require('@/static/xxx.png')是iOS和小程序端唯一可靠写法,参数必须为字面量字符串;H5需配置base为./并统一用/src="/static/xxx.png";动态路径含特殊字符须整串encodeURIComponent;真机调试必用uni.getImageInfo验证。

require('@/static/xxx.png') 是 iOS 和小程序端唯一可靠写法
动态拼接路径在真机上大概率静默失败,不是报错,是直接留白。iOS 原生不支持运行时解析本地路径,src="/static/" + name + ".png" 或 :src="'/static/' + filename" 全部无效。
必须用 require(),且参数只能是字面量字符串:
- ✅ 正确:
logoUrl: require('@/static/images/logo.png') - ❌ 错误:
require('@/static/images/' + type + '.png')(含变量) - ❌ 错误:
require(`@/static/images/${name}.png`)(模板字符串) - ⚠️ 注意:
@/别名只在 HBuilderX 编译期生效,打包后检查dist/build/app-plus/static/images/目录下文件是否真实存在、大小写是否完全一致(Logo.png≠logo.png)
H5 打包后图片空白?先查 base 路径和斜杠
H5 发行到服务器后本地图片全挂,大概率是 base 配置或路径开头多了一个斜杠。H5 对静态资源路径敏感,尤其在非根目录部署时。
- 在
vue.config.js或 HBuilderX 的「发行」→「H5 配置」中,把「基础路径」设为./(带点),不是/或空字符串 - 避免
h5/your-project/这类带尾部斜杠的路径配置,它会导致static/解析成h5/your-project//static/,双斜杠触发 404 - 引用时统一用根相对路径:
src="/static/icon.png",不要用./static/icon.png或../static/icon.png - 如果用了自定义
baseUrl,比如baseUrl: './static/other/',确保所有拼接都基于该前缀,且结尾不带斜杠
动态路径含中文/空格/括号?整串 encodeURIComponent
小程序和 iOS 真机对 URI 合法性要求极严,遇到未编码的中文、空格、&、#、括号等字符,会直接截断路径,控制台可能只显示 Image load failed 或无任何提示。
- 接口返回的图片 URL 必须整串编码:
encodeURIComponent(url),不是只编码参数部分 - 用户上传路径、临时路径(如
res.tempFilePath)也要编码后再赋值给:src - 服务端返回路径时,建议提前做 URI 编码,避免前端重复处理
- 特别注意:uni-app 不会对
中的变量自动编码,这事必须手动做
真机调试别信模拟器,用 uni.getImageInfo 主动验证
HBuilderX 模拟器对路径过于宽容,很多问题根本暴露不出来。iOS 和小程序真机才是最终考场。
- 关键路径上线前务必调一次:
uni.getImageInfo({ src: '/static/test.png' }) - 成功回调能拿到
width/height,失败会明确报错,比如fail: "no such file or directory" - 后台挂起再切回前台时,iOS 可能丢弃缓存图片——这不是路径问题,得在
onShow里重试加载或预校验 - 网络图还要额外注意:必须 HTTPS + ≤20KB;分享场景下,必须先
uni.downloadFile下载到临时路径,再传tempFilePath给uni.share
路径写对只是第一步,跨平台编译后的产物结构、运行时 URI 合法性、以及真机系统级拦截,这三个层面任何一个出问题,图片都会无声无息地消失。











