行业资讯

uni-app 部署发布策略,开发是一套代码,发布不是一条路

发布时间:2026/8/3 9:50:09
uni-app 部署发布策略,开发是一套代码,发布不是一条路 uni-app 最吸引人的地方是一套代码可以发布到多个平台。这句话没错。但很多新手会误会成发布也只需要点一个按钮。真不是。H5、小程序、App 的上线方式、审核规则、缓存策略、回滚方式、版本管理都不一样。你在开发阶段享受“统一”在发布阶段必须尊重“差异”。这一篇不追求讲完所有平台规则。我们只把一个商品应用从开发到上线最容易踩的发布问题讲清楚。太长不看版发布前先问四个问题。我要发到哪个平台H5、微信小程序、App还是多个一起发当前构建连接的是开发接口、测试接口还是生产接口平台需要的域名、权限、隐私协议、版本号、证书都配好了吗发出去之后发现问题怎么观察、怎么降级、怎么回滚开发时你可以想“一套代码”。发布时一定要按平台拆开想。这一篇放在系列里的位置如果你还没做上线前检查先看 10-上线前检查清单.md。如果你担心权限和隐私回看 14-安全防护与数据保护.md。如果你还没做真机和异常测试先看 15-测试调试与质量保证.md。这一篇解决的是代码写完以后怎么发出去怎么别把开发环境、错误配置和不可回滚风险一起发出去。先看三条发布路径同一份 uni-app 源码最后会走到不同平台。H5微信小程序Appuni-app 源码构建发布目标生成 Web 静态资源生成小程序项目生成 Android/iOS 安装包服务器或 CDN微信开发者工具上传审核应用市场或企业分发看起来都是“发行”。但每条路要检查的东西不同。发布前先做环境隔离上线事故里有一种特别低级但特别常见。生产包连到了测试接口。或者测试包连到了生产支付。这种问题不靠“我记得改了”来解决。要靠环境配置集中管理。// 文件位置config/env.jsconstconfigs{development:{baseURL:https://dev-api.example.com,enableDebug:true},test:{baseURL:https://test-api.example.com,enableDebug:true},production:{baseURL:https://api.example.com,enableDebug:false}}exportconstappConfigconfigs[process.env.NODE_ENV]||configs.development请求封装里只读配置。// 文件位置utils/request.jsimport{appConfig}from/config/envexportconstrequest(options){returnnewPromise((resolve,reject){uni.request({url:${appConfig.baseURL}${options.url},method:options.method||GET,data:options.data||{},success:resolve,fail:reject})})}关键点是页面不要到处写死接口域名。域名散落在页面里最后一定会有人漏改。H5 发布看资源路径、路由刷新和缓存H5 发布最像普通前端项目。你构建出一批静态文件然后放到服务器、对象存储或 CDN 上。H5 最常见的问题有三个。资源路径错了商品图片、JS、CSS 加载 404页面白屏或样式丢失。如果你的站点部署在子路径比如https://example.com/goods-app/就要确认构建配置里的基础路径是否匹配。发布后打开浏览器 DevTools先看 Network 有没有红色 404。刷新深层页面 404用户直接打开商品详情页或者在详情页刷新。如果服务端没有做好回退配置可能直接 404。能不能用户访问 /goods/detail?id1Web 服务器服务器是否能识别前端路由返回 index.html404如果你用的是前端路由模式要让服务器把未知前端路径回退到index.html。不同服务器配置方式不同但思路一样。CDN 缓存导致旧代码还在你发了新版本但用户看到的还是旧页面。这通常是缓存问题。发布 H5 时建议静态资源文件带 hashHTML 不要缓存太久。这样 JS/CSS 可以长缓存入口 HTML 可以尽快拿到新版本。微信小程序发布看 appid、合法域名、包体积和审核小程序不是把 H5 丢上服务器。它有平台规则。商品应用上线微信小程序前至少检查这些。检查项为什么重要appid错 appid 会发到错误小程序请求合法域名未配置域名时真机请求会失败上传文件域名图片上传也要配置对应域名隐私协议涉及用户信息、相册、位置等能力时必须说明权限用途相机、定位、相册要和功能匹配包体积超限会影响上传或启动体验页面路径分享、跳转、扫码入口要能打开小程序发布一般会经历这样的流程。本地开发微信开发者工具预览真机测试上传体验版提交审核发布线上版本有一点要特别注意。小程序审核是需要时间的。所以如果你上线后才发现重大问题修复节奏不会像 H5 那么自由。上线前的测试和灰度体验就更重要。App 发布看证书、版本号、权限和应用市场规则App 发布比 H5 和小程序更重。你要考虑 Android 和 iOS 的包名、证书、版本号、权限、隐私政策、应用市场审核。最容易被忽略的是版本号。一般会有两个概念。概念用途versionName给用户看的版本比如1.2.0versionCode给系统判断升级顺序的数字比如10200不要只改展示版本不改构建版本。否则应用市场或系统可能判断不出这是一个新包。权限也要克制。如果商品应用只做浏览和发布可能需要相册、相机、网络。除非你真的做“附近商品”否则不要随便申请定位。权限越多审核风险越高用户也越不信任。分包和预加载不是上线前才想起来前面 13-性能优化入门.md 讲过分包和预加载。发布阶段要再核一次。pages.json里可以配置页面、tabBar、subPackages、preloadRule 等。官方文档里也明确preloadRule可以在进入小程序某个页面时预下载可能需要的分包用来提升后续页面启动速度。一个商品应用可以这样理解。主包首页商品列表我的发布分包商品发布图片裁剪订单分包订单列表订单详情不要把所有页面都塞进主包。但也不要为了分包而分包。首页、tabBar、首屏关键页面一般留在主包低频大功能再考虑拆出去。条件编译要集中不要撒满页面发布多端时平台差异不可避免。uni-app 支持条件编译比如#ifdef H5、#ifdef MP-WEIXIN、#ifdef APP-PLUS。官方文档里也提到条件编译可以用于 JS、模板、CSS、pages.json、static 等场景。但条件编译不是越多越好。错误倾向是每个页面都写一堆平台判断。更好的做法是把平台差异封装成方法。// 文件位置utils/platform.jsexportconstgetShareChannel(){// #ifdef MP-WEIXINreturnwechat-mini-program// #endif// #ifdef H5returnh5// #endif// #ifdef APP-PLUSreturnapp// #endifreturnunknown}页面里只调用getShareChannel()。这样以后平台逻辑改了不需要到处找。发布后要观察不要发完就关电脑发布不是最后一步。发布后至少观察这些。页面白屏率。接口错误率。登录失败率。商品发布成功率。图片上传失败率。小程序审核反馈。应用市场崩溃反馈。如果你暂时没有专业监控也可以先做最朴素的发布记录。// 文件位置docs/release-log.md# 发布记录 ## v1.0.0 - 发布时间 - 发布平台 - 构建环境 - 主要改动 - 影响页面 - 回滚方式 - 发布后观察发布记录的价值不在于形式。而是出问题时你能知道这次到底改了什么。回滚和降级要提前想小项目也要有退路。H5 可以回滚到上一版静态资源。小程序可以视情况回退线上版本或重新提交审核。App 如果已经发到市场回滚成本更高所以更需要灰度、版本控制和服务端降级开关。否是能不能发布新版本观察核心指标是否异常继续扩大范围能否前端快速修复补丁或重新发布回滚旧版本或服务端降级如果某个新功能风险高比如商品发布页改了上传流程可以让后端加一个开关异常时先关闭新入口。不要把所有风险都押在重新发包上。这里容易翻车生产包连着测试接口或者测试包连着生产支付。H5 部署到子路径后静态资源 404。深层页面刷新 404以为是前端路由坏了其实是服务器没回退。CDN 缓存没处理用户一直加载旧 JS。小程序忘记配置 request/uploadFile 合法域名。权限申请和实际功能不匹配审核或用户信任出问题。App 只改versionName没改构建版本号。发布后没有观察指标用户反馈了才知道线上坏了。自己试试给项目加一个config/env.js把开发、测试、生产接口地址集中管理。写一份docs/release-log.md发布记录模板。检查manifest.json和pages.json列出当前项目发布到 H5、小程序、App 分别要改哪些配置。模拟一次 H5 发布后回滚写出你会恢复哪一版文件、清哪些缓存、通知谁验证。这一篇先记住什么uni-app 帮你统一了开发体验。但它没有消灭平台发布差异。H5 看资源路径、路由刷新、缓存和回滚。小程序看 appid、合法域名、包体积、隐私协议和审核。App 看证书、版本号、权限、市场规则和升级策略。所有平台都要先做好环境隔离再做发布记录再做发布后观察。上线不是把代码扔出去。上线是把风险有控制地交给真实用户。