uni-app的CI/CD需依赖外部工具链,核心是将npm构建命令(如build:mp-weixin)嵌入流水线,并确保Node.js版本一致、正确配置环境变量与平台专属参数(如appid、签名证书),禁用TS检查和source map以提升稳定性与速度。
uni-app项目怎么跑通CI/CD基础构建流程
uni-app本身不内置ci/cd能力,必须靠外部工具链驱动构建。核心是把 npm run build:mp-weixin 这类命令塞进流水线里,但直接照搬h5或vue cli的配置会失败——因为uni-app的构建逻辑被封装在 @dcloudio/vue-cli-plugin-uni 里,依赖它提供的环境变量和钩子。
- 必须在CI环境中安装完整Node.js + npm(推荐LTS版),且版本需与本地开发一致,
node -v不匹配会导致Cannot find module '@dcloudio/uni-cli-shared' - 确保
package.json中有明确的构建脚本,比如"build:weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build",不能只写uni-build——CI里没有全局命令 - 微信小程序构建需额外准备
project.config.json和合法的appid,否则构建产物无法上传;App平台还需配置签名证书路径,CI服务器上一般得用--mode production加载对应环境变量
GitLab CI里怎么避免uni-app构建卡在“正在编译”
常见现象是流水线日志停在 Starting type checking service... 或 Compiling dependencies... 后无响应,实际是TypeScript检查或依赖解析阻塞了进程。uni-app默认启用 fork-ts-checker-webpack-plugin,而CI容器常因内存不足或CPU限制导致该插件 hang 住。
- 在
vue.config.js中显式关闭类型检查:configureWebpack: { plugins: [new ForkTsCheckerWebpackPlugin({ async: false })] }改为async: true,或直接删掉插件 - 添加超时控制:GitLab CI的
timeout默认3600秒,但uni-app多端构建可能超时,建议在.gitlab-ci.yml中设timeout: 2h - 禁用source map生成:CI不需要调试文件,在
vue.config.js的configureWebpack里加devtool: false,能提速30%以上
如何让uni-app一次构建多个平台并分发到不同目录
uni-app不支持单次命令输出多个平台产物,UNI_PLATFORM 是单值环境变量,强行逗号分隔(如 mp-weixin,app)会报错 Invalid platform。必须拆成多个job或串行执行。
- 用
npm run build:weixin && npm run build:alipay && npm run build:h5串行调用,但任一失败则中断;更稳妥的是用GitLab CI的parallel关键字起多个job,每个job设置独立的UNI_PLATFORM - 各平台产物默认输出到
dist/build/xxx,可通过UNI_OUTPUT_DIR环境变量重定向,例如UNI_OUTPUT_DIR=dist/weixin npm run build:mp-weixin - 注意:App平台构建(
UNI_PLATFORM=app)必须在macOS环境下运行,Linux或Windows CI节点会直接报错Cannot find module 'xcode',别硬扛
微信小程序自动上传失败的三个典型原因
用 cli-uploader 或 miniprogram-ci 上传时,90%的失败不是代码问题,而是权限、路径或配置偏差。
-
project.config.json必须存在且含有效appid,上传工具不会自动读取manifest.json里的name或description,缺失就报project.config.json not found - 上传命令的工作目录必须是小程序根目录(即含
project.config.json的那一层),不是dist/build/mp-weixin目录;正确写法是cd dist/build/mp-weixin && miniprogram-ci upload ...会失败,得先cp -r整个结构再上传 - 微信开发者工具未开启服务端口或未登录:CI上传依赖本地已登录的开发者工具,若用Docker运行,需挂载
~/.wxdevtools并确保工具处于运行状态,否则提示upload failed: connect ECONNREFUSED 127.0.0.1:9420
最麻烦的其实是平台差异:H5可以静态托管,小程序要走审核,App要过审+签名,CI里一个参数写错,整条线就卡在发布环节。别省那几行 echo 日志,每步输出当前 UNI_PLATFORM 和 pwd,排查起来快得多。










