phpci⼩程序,⼩程序miniprogram-ci上传代码需求
多个⼩程序共⽤同⼀套代码,通过开发⼯具上传代码较繁琐,希望通过后台点击上传。
调研
通过查阅资料,发现提供了两种⽅法
针对需求和实现难度,暂时考虑miniprogram-ci⽅法
miniprogram-ci接⼊
前期准备
获取appid和对应的⼩程序代码上传密钥(开发设置-⼩程序代码上传中获取)
由于是本地环境调试,先关闭IP⽩名单
我使⽤的是uni-app,将build后的⼩程序⽂件和⼩程序上传密钥⽂件放到vue项⽬中
⼀次错误的尝试
在vue项⽬中安装
npm install miniprogram-ci --save
按照⽂档中的写了⽅法,对应appid、projectPath、privateKeyPath等都配置好了
const ci = require('miniprogram-ci')
;(async () => {
中文版php开发工具const project = new ci.Project({
appid: 'wxsomeappid',
type: 'miniProgram',
projectPath: 'the/project/path',
privateKeyPath: 'the/path/to/privatekey',
ignores: ['node_modules/**/*'],
})
const uploadResult = await ci.upload({
project,
version: '1.1.1',
desc: 'hello',
setting: {
es6: true,
},
onProgressUpdate: console.log,
})
console.log(uploadResult)
})()
调⽤上⾯的⽅法,报错fs.statSync is not a function。
查了⼀波资料,说是需要node环境。翻官⽹,看到了这个
image.png
换个⽅式
将之前的代码放到mini.js中,在vscode终端中,cd进⼊mini.js所在⽬录,执⾏
node mini.js
去⼩程序平台查看,上传成功。但这种⽅法明显不符合需求,不能在后台系统点击操作使⽤nodesjs服务执⾏
使⽤koa搭建nodejs项⽬
引⼊miniprogram-ci
⼩程序和上传密钥资源拷贝到项⽬中
创建mini.js
let uploadMini = function(appid) {
return new Promise(async (resolve, reject) => {
const ci = require('miniprogram-ci')
const path = require('path')
const project = new ci.Project({
appid: appid,
type: 'miniProgram',
projectPath: solve(__dirname, './source/mp-weixin'),
privateKeyPath: solve(__dirname, `./source/private.${appid}.key`), ignores: ['node_modules/**/*'],
})
ci.upload({
project,
version: '1.1.1',
desc: 'hello',
setting: {
es6: true,
},
onProgressUpdate: console.log,
}).then(res => {
resolve({ code: 0, msg: 'success' })
}).catch(err => {
reject(err)
})
})
}
创建⼀个接⼝
const { uploadMini } = require('./mini.js') ('/uploadMini', async ( ctx )=>{
let appid = ctx.query.appid
let response = {}
if (appid) {
let res = await uploadMini(appid).catch(err => { if (de == 20003) {
err.msg = 'appid与上传密钥不匹配'
}
ctx.body = err
})
if (res) {
ctx.body = res
}
} else {
response = {
code: 1,
msg: '发布失败'
}
ctx.body = response
}
})
Vue项⽬中调⽤该接⼝(传⼊appid)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。