小程序批量上传

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

  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"
  }
}

    
相关推荐
流烟默40 分钟前
vue和微信小程序处理markdown格式数据
前端·vue.js·微信小程序
乔冠宇6 小时前
微信小程序中将图片截图为正方形(自动居中)
微信小程序·小程序·typescript·uniapp
V+zmm101348 小时前
在线办公小程序(springboot论文源码调试讲解)
vue.js·spring boot·微信小程序·小程序·毕业设计
V+zmm1013410 小时前
自驾游拼团小程序的设计与实现(ssm论文源码调试讲解)
java·数据库·微信小程序·小程序·毕业设计
{⌐■_■}13 小时前
【gitlab】认识 持续集成与部署
ci/cd·log4j·gitlab
Karoku06614 小时前
【CI/CD】Jenkinsfile管理+参数化构建+邮件通知以及Jenkins + SonarQube 代码审查
运维·ci/cd·容器·kubernetes·jenkins·rancher
黑马源码库miui5208615 小时前
挪车小程序挪车二维码php+uniapp
微信小程序·小程序·微信公众平台
盛夏绽放1 天前
微信小程序地图map全方位解析
微信小程序·小程序
初尘屿风1 天前
基于微信小程序的电影院订票选座系统的设计与实现,SSM+Vue+毕业论文+开题报告+任务书+指导搭建视频
vue.js·微信小程序·小程序
Incredibuild1 天前
深入了解 DevOps 基础架构:可追溯性的关键作用
ci/cd·devops