小程序批量上传

随着业务发展,小程序包越来越多时,我们手动上传小程序包到官方后台越来越麻烦,且可能出现配置错误。我们该怎么办???(解放双手,一切交给脚本)

  1. 新建与pages同级的nimiprogramCi文件。内部维护小程序上传秘钥(nimiprogramCi.uploadProjectKey)和动态写入的小程序信息(nimiprogramCi.appInfo)

2. 将 nimiprogramCi.appInfo 中信息引入app.js, 并赋值给全局变量 this.globalData.tagOptions

  1. 新建与app.js同级的 ci_upload.js 文件,写我们的批量上传脚本
  1. 将维护小程序信息的文件内部格式改为key(小程序appid)-value(小程序信息)格式
  1. 文件结构注释

完整代码: nimiprogramCi.uploadProjectKey 文件下维护小程序代码上传密钥

js 复制代码
    
// utils.config.js
const tagOptions = {
  "wx0xxxxxxxxxxxxxx": {
    app:'app名称',
    appName:'小程序名称',
    pname:'包名(与服务端一致)',
    vn:'1.3.14', // 版本号
    appid:'wx0xxxxxxxxxxxxxx'
  }
}
module.exports = {
  tagOptions: tagOptions
}


// nimiprogramCi.appInfo.js
const { tagOptions } = require("../utils/config.js");
module.exports = {appInfo: tagOptions['wx9xxxxxxxxxxxxx']} // 导出对应你的小程序信息


// app.js
const { appInfo } = require("./miniprogramCi/appInfo.js") // 引入对应的小程序信息
App({
onLaunch(){},
onShow(){
  this.initFn()
},
// 初始化全局配置
initFn () {
  // 设置版本号,将小程序信息赋值到全局对象【globalData.tagOptions】
  this.globalData.tagOptions = appInfo // node readFileSync写入[miniprogramCi.js]文件
  this.globalData.vn = this.globalData.tagOptions.vn
  console.log('小程序:' + this.globalData.tagOptions.appName, '版本:' + this.globalData.tagOptions.vn)
 },
})
    
    
// ci_upload.js
const ci = require('miniprogram-ci') // 小程序 CI 工具
const path = require("path")
const fs = require('fs') // fs.writeFileSync 同步动态写入小程序信息
const filePath = path.join(__dirname,'./miniprogramCi/appInfo.js')

// 【appId】维护需批量上传的小程序appid,即为config文件中【key】
let appId = [
  "wx9xxxxxxxxxxxxxxxx", 
  "wx5xxxxxxxxxxxxxxxx1", 
  "wx0xxxxxxxxxxxxxxxx", 
  "wx6xxxxxxxxxxxxxxxx", 
]

let ci_production = process.argv.lastIndexOf('ci_upload') !== -1

function miniprogramCiUpload (i){
  if(!appId[i]) return // 上传完毕,终止运行
    fs.writeFileSync(filePath, `
    const { tagOptions } = require("../utils/config.js");
    module.exports = {appInfo: tagOptions['${appId[i]}']}`)
    // 创建项目实例
    let project = new ci.Project({
      appid: appId[i], // 小程序appid
      type: 'miniProgram',
      projectPath: process.cwd(), // 项目路径
      privateKeyPath: process.cwd() + `/miniprogramCi/uploadProjectKey/private.${appId[i]}.key`, // 上传秘钥路径
      robot: 1, // robot 仅支持1--30, 不支持其他描述
      ignores: ['node_modules/**/*'],
    })
  
    if(ci_production){
      // 项目上传
      ci_upload(project)
    } else {
      // 项目预览二维码
      ci_perview(project)
    }
}

function ci_upload(project){
  ci.upload({
    project,
    version: '1.1.1',
    desc: '测试批量上传',
    setting: {
      minify: true,
    },
  }).then(res => {
    console.log('上传成功')
    miniprogramCiUpload(i+1)
  }).catch(error => {
    if (error.errCode == -1) {
      console.log('上传成功')
      miniprogramCiUpload(i+1)
    } else {
      console.error(error, appId[i], '上传失败')
      miniprogramCiUpload(i+1)
      process.exit(-1) // 将强制进程尽快退出,即使仍有未完全完成的异步操作挂起
    }
  })
}
function ci_perview(project){
  ci.preview({
    project,
    desc: '测试批量上传', // 此备注将显示在"小程序助手"开发版列表中
    setting: {
      es6: true,
    },
    qrcodeFormat: 'image',
    qrcodeOutputDest: `${process.cwd()}/qrImage/${appId[i]}.jpg`, // 存放生成的二维码
    pagePath: 'pages/reader/reader', // 预览页面
    searchQuery: 'a=1&b=2',  // 预览参数 [注意!]这里的`&`字符在命令行中应写成转义字符`\&`
  }).then((res)=>{
    miniprogramCiUpload(i+1)
  }).catch((err)=>{
    if (err.errCode == -1) {
      miniprogramCiUpload(i+1)
    }
  })
}
miniprogramCiUpload(0) // 开始执行编译和上传,默认传0,


// package.json
{
  "name": "miniprogram_ci",
  "version": "1.0.0",
  "description": "miniprogram_ci",
  "author": "author",
  "scripts": {
    "up": "node ci_upload.js ci_upload",
    "qr": "node ci_upload.js ci_preview"
  },
  "dependencies": {
    "miniprogram-ci": "^1.9.15"
  }
}

    
相关推荐
程序员入门进阶6 小时前
基于微信小程序的电子购物系统的设计与实现(lw+演示+源码+运行)
微信小程序·小程序
我很苦涩的10 小时前
微信小程序使用uni cli框架绘制echarts图表
微信小程序·小程序·echarts
慢慢雨夜13 小时前
uniapp发布到微信小程序,提示接口未配置在app.json文件中
微信小程序·小程序·uni-app
qq_4337169514 小时前
编写第一个 Appium 测试脚本:从安装到运行!
自动化测试·软件测试·jmeter·ci/cd·职场和发展·appium·jenkins
杨天天.17 小时前
微信小程序原生 canvas画布截取视频帧保存为图片并进行裁剪
微信小程序·小程序·音视频
一介青烟小生18 小时前
微信小程序自定义tabbar;禁用某个tab;修改某个tab的样式
微信小程序·小程序·notepad++
尘浮生18 小时前
Java项目实战II基于微信小程序的订餐系统(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·微信小程序·小程序
睡觉谁叫19 小时前
Cargo deny安装指路
c++·后端·ci/cd·rust·跨端
孩子 你要相信光20 小时前
HBuilderX运行微信小程序,编译的文件在哪,怎么运行
微信小程序·小程序
烤奶要加冰1 天前
uniapp解析蓝牙设备响应数据bug
前端·微信小程序·uni-app