声明此代码仅供技术交流学习,擅自用于其他,一切后果与本人无关
几百个同样代码的小程序,如果通过小程序开发工具提交代码,那是真的痛苦,看了官方文档,官方提供了相应的工具 ci,看了下感觉非常简单,必须立马搞起来,做成几百个一键上传
整体思路
- 几百个小程序关闭白名单和拿到密钥,这个文档上写的很清楚
- 因为每套代码相同,只有
project.config.json
里面的appid
和projectname
是不一样的,所以每次上传的时候都要修改这个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
}