多个小程序一键上传,脱离小程序开发工具

声明此代码仅供技术交流学习,擅自用于其他,一切后果与本人无关

几百个同样代码的小程序,如果通过小程序开发工具提交代码,那是真的痛苦,看了官方文档,官方提供了相应的工具 ci,看了下感觉非常简单,必须立马搞起来,做成几百个一键上传

整体思路

  • 几百个小程序关闭白名单和拿到密钥,这个文档上写的很清楚
  • 因为每套代码相同,只有project.config.json里面的appidprojectname是不一样的,所以每次上传的时候都要修改这个json文件
  • 然后循环执行上传

项目结构

项目结构还是很简单的,毕竟只是一个上传工具

pack就是小程序代码
xcxkey是密钥存放的地方
在这里插入图片描述

执行逻辑

const ci = require('miniprogram-ci');
let axios = require("axios");
const fs = require('fs');
const path = require('path');

let config = {
  xcxKey: [], //需要上传的小程序列表
  version: "", //版本号
  desc: "", //备注
  appindex: 0 //当前执行到第几个
}

;
(async () => {
  //先拿到需要上传的列表,也就是小程序的appid和名称等相关信息,还有上传的版本和备注
  let {data} = await axios.get('后台地址')
  config.xcxKey = data.data.xcxKey;
  config.version = data.data.version;
  config.desc = data.data.desc;
  config.appindex = 0;
  console.log(`本次提交--${config.xcxKey.map(item=>item.miniName)}`)
  console.log(`版本--${config.version}`)
  console.log(`备注--${config.desc}`)
  uploadStart()
})()

async function uploadStart() {
  if(!config.xcxKey[config.appindex]){
    console.log('上传完成')
    return;
  }
  //开始上传,首先修改文件信息
  await setappjson()
  console.log(`${config.xcxKey[config.appindex].name}开始`)
  const project = new ci.Project({
    appid: config.xcxKey[config.appindex].miniAppId,
    type: 'miniProgram',
    projectPath: './pack',
    privateKeyPath: `./xcxkey/private.${config.xcxKey[config.appindex].miniAppId}.key`,
    ignores: ['node_modules/**/*'],
  })
  const uploadResult = await ci.upload({
    project,
    version:config.version,
    desc: config.desc,
    setting: {
      es6: true
    },
    onProgressUpdate: getstate,
  })
  //监听上传过程,如果上传完成延迟10秒再上传下一个
  function getstate(e){
    if(e._status=="done" && e._msg=="upload"){
      console.log(`${config.xcxKey[config.appindex].name}上传完成`)
      setTimeout(()=>{
        config.appindex+=1;
        uploadStart()
      },10000)
    }
  }
}

//修改文件内容
async function setappjson() {
  const promise = new Promise((resolve, reject) => {
    fs.readFile(path.join(__dirname, './pack/project.config.json'), 'utf8', function (err, data) {
      if (err) throw err;
      let json = JSON.parse(data);
      json.appid = config.xcxKey[config.appindex].miniAppId;
      json.projectname = encodeURIComponent(config.xcxKey[config.appindex].name);
      fs.writeFile('./pack/project.config.json', JSON.stringify(json), 'utf8', (err) => {
        if (err) throw err;
        resolve()
      });
    });
  })
  return promise
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值