【自动运维】miniprogram-ci 实现微信小程序一键上传发布

【自动运维】miniprogram-ci 实现微信小程序一键上传发布

一、 概述

在传统开发流程中,发布小程序需要打开“微信开发者工具”手动点击上传。通过官方提供的 miniprogram-ci 工具,我们可以脱离图形界面,直接通过脚本实现代码上传,为后续接入 GitHub Actions 或 Jenkins 自动化流水线打下基础。

环境要求:

  • Node.js:v18.x+

  • 包管理器:pnpm

  • 项目架构:Vite + Uniapp


二、 准备工作

  1. 下载密钥:登录 微信公众平台,进入 开发 -> 开发管理 -> 开发设置 -> 小程序代码上传

  2. 生成密钥:生成并下载 private.wx*******.key 文件,放在项目根目录或 push 目录下。

  3. 配置 IP 白名单:出于安全考虑,建议关闭“IP 白名单直接上传”,或将你的开发/服务器 IP 加入白名单。


三、 安装 CI 工具

pnpm add miniprogram-ci --save-dev

 


四、 编写发布脚本

为了避免硬编码路径导致的错误,我们使用 path 模块自动处理绝对路径。在项目根目录下创建 push/start.js

const ci = require('miniprogram-ci');
const path = require('path');

// 基础配置
const APPID = '你的微信小程序APPID';
const PRIVATE_KEY_PATH = path.join(process.cwd(), 'push/private.xxxx.key'); // 私钥绝对路径
const PROJECT_PATH = path.join(process.cwd(), 'dist/build/mp-weixin');   // Uniapp 编译后的产物路径

const project = new ci.Project({
  appid: APPID,
  type: 'miniProgram',
  projectPath: PROJECT_PATH,
  privateKeyPath: PRIVATE_KEY_PATH,
  ignores: ['node_modules/**/*'],
});

(async () => {
  console.log('正在上传至微信后台...');
  
  try {
    const uploadResult = await ci.upload({
      project,
      version: '1.0.0', // 此处可对接 package.json 的 version
      desc: `自动发布于 ${new Date().toLocaleString()}`,
      setting: {
        es6: true,
        minify: true,
        autoPrefixWXSS: true,
      },
      onProgressUpdate: console.log,
    });

    console.log('✅ 上传结果:', uploadResult);
    console.log('🚀 请前往小程序后台“开发版本”查看并提交审核。');
  } catch (error) {
    console.error('❌ 上传失败:', error);
    process.exit(1);
  }
})();

 


五、 项目结构参考

请确保 projectPath 指向的是包含 project.config.json 的目录。对于 Uniapp 来说,通常是编译后的 mp-weixin 文件夹。

my-vite-uniapp 
├── dist                # 编译输出目录
│   └── build
│       └── mp-weixin   # <--- ci 工具指定的 projectPath
│           ├── app.json
│           └── ...
├── push                # 脚本目录
│   ├── private.key     # 密钥文件
│   └── start.js        # 执行脚本
├── package.json
└── vite.config.js

 


六、 执行发布

在执行脚本前,请确保你已经运行了 pnpm run build:mp-weixin,保证 dist 目录下有最新的代码。

# 执行上传
node push/start.js

 

成功标志:

终端输出 status: 'done' 且显示包体积信息(subPackageInfo)即为成功。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容