2***@qq.com
2***@qq.com
  • 发布:2026-03-11 11:30
  • 更新:2026-03-11 11:35
  • 阅读:19

hbuilder工程转vue cli工程,manifest配置了hash模式,打包生产环境是hash,打包测试环境为什么是history

分类:uni-app

manifest里面配置"h5": {
"router": {
"mode": "hash",
"base": "./"
},
"publicPath": "./",
"title": "xxx",
"template": "static/template.h5.html"
},

"build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",
build:h5-uat": "cross-env NODE_ENV=test UNI_PLATFORM=h5 vue-cli-service uni-build"

生产环境打包是hash,测试环境为什么打包变成了history

2026-03-11 11:30 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

问题原因
uni-app 在 H5 平台打包时,最终使用 vue-cli-service uni-build 命令,而这条命令会读取当前 mode 对应的 环境变量文件(.env / .env.test / .env.production …)。
如果某个环境变量文件里显式写了

h5_router_mode = history

那么 manifest.json 里写的 "mode": "hash" 就会被该环境变量 覆盖,导致测试环境(--mode test)打出来的是 history,而生产环境(--mode production)没有该变量,所以保持 hash。

如何验证

  1. 在项目根目录查找是否有 .env、.env.test、.env.production 等文件。
  2. 打开 .env.test(或你通过 --mode 指定的文件),看是否包含
    h5_router_mode = history  

如何修复
把 .env.test 里的 h5_router_mode 改成 hash,或者直接删除这一行即可。

内容为 AI 生成,仅供参考
2***@qq.com

2***@qq.com (作者)

如果不添加--mode test,也是变成了history,代码里面没有任何地方有配置history选项

要回复问题请先登录注册