需在manifest.json的h5节点下配置"template": "template.h5.html",并在项目根目录创建同名EJS模板文件,通过等预置变量动态注入资源路径,修改后须清空unpackage目录重新打包。

怎么指定 template.h5.html 作为 H5 打包模板
uni-app 默认用内置 HTML 模板生成 index.html,要自定义 head/meta/script 等内容,必须显式声明外部模板文件。关键不是“放哪”,而是“在哪配”——manifest.json 的 h5.template 字段才是生效入口。
- 在项目根目录新建
template.h5.html(名字必须完全一致,不能是index.html或其他) - 复制官方基础模板(含
占位符),再按需修改 meta、icon、第三方统计脚本等 - 打开
manifest.json→ 找到h5节点 → 添加或修改"template": "template.h5.html" - ⚠️ 路径必须是相对于项目根目录的相对路径,不能写
./template.h5.html或/template.h5.html,只写文件名即可
template.h5.html 里哪些变量能用、怎么用
template.h5.html 是编译时处理的 EJS 模板,不是运行时 HTML。只有少数几个预置变量可用,且大小写、拼写错一个就失效。
-
:对应manifest.json中配置的“运行的基础路径”,比如填了/h5/,这里就输出/h5/;填了/就输出空字符串 -
:仅用于引用带 hash 的 CSS 文件(如static/index.abc123.css),打包时自动注入,不能手写值 - 不要试图用
process.env、__dirname或自定义全局变量——这些在模板渲染阶段根本不可达 - 引入 JS 必须用
<script src="<%=%20BASE_URL%20%>static/xxx.js"></script>,硬编码路径会导致部署到子目录时 404
为什么改了 template.h5.html 但打包后没生效
最常见原因是配置未触发重新编译,或路径/字段名写错。HBuilderX 和 CLI 对模板变更的监听不敏感,经常缓存旧结果。
- 确认
manifest.json中h5.template字段在顶层h5对象下,不是嵌套在h5.dev或h5.build里 - 改完
template.h5.html后,必须清掉unpackage目录再重新打包,否则沿用旧缓存 - 检查控制台输出是否有
Template not found或Failed to load template类错误,这类提示会直接暴露路径问题 - 如果用了自定义构建脚本(如
vue.config.js),确认没覆盖或禁用 uni-app 的模板机制
部署到子目录时 template.h5.html 的坑
当应用部署在 https://example.com/app/ 这类子路径时,BASE_URL 值决定所有静态资源引用是否正确,但很多人忽略它和实际 Nginx 配置的配合。
-
manifest.json中“运行的基础路径”必须设为/app/(结尾带斜杠),否则输出不匹配 - 模板里所有资源路径(CSS、JS、图片)都要通过
拼接,硬编码/static/会导致 404 - Nginx 配置需加
location /app/ { alias /path/to/dist/; },而不是root,否则静态文件路径多一层app/app/static/ - history 路由模式下,Nginx 还要加
try_files $uri $uri/ /app/index.html;,否则刷新页面 404
真正卡住人的往往不是模板写法,而是 BASE_URL、Nginx alias、前端路由三者之间的路径对齐——少对一环,资源就加载失败。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











