一、miniprogram-ci 介绍
1、miniprogram-ci 简介
miniprogram-ci 是从微信开发者工具中抽离的关于小程序/小游戏项目代码的编译模块。开发者可不打开小程序开发者工具,独立使用 miniprogram-ci 进行小程序代码的上传、预览等操作。
文档:https://www.npmjs.com/package/miniprogram-ci
2、使用前提:平台设置
使用 miniprogram-ci 前应在微信公众平台登录小程序,访问“开发-开发管理-开发设置”后下载“代码上传密钥”,并配置 IP 白名单。
开发者可选择打开 IP 白名单,打开后只有白名单中的 IP 才能调用相关接口。
代码上传密钥拥有预览、上传代码的权限,密钥不会明文存储在微信公众平台上,一旦遗失必须重置,请开发者妥善保管
3、脚本调用:npm install miniprogram-ci --save
4、项目对象:
const ci = require('miniprogram-ci') // 注意: new ci.Project 调用时,请确保项目代码已经是完整的,避免编译过程出现找不到文件的报错。 const project = new ci.Project({ appid: 'appid', type: 'miniProgram', projectPath: 'the/project/path', privateKeyPath: 'the/privatekey/path', ignores: ['node_modules/**/*'], })
上传代码
const ci = require('miniprogram-ci') ;(async () => { 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) })()
详细参数配置,见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/ci.html
二、miniprogram-ci 实际使用
看下目录结构:下面 2 个 key 是不同 appid 环境的代码上传秘钥
我们主要看下 autoUpload.js
// 自动将代码上传到小程序 const ci = require('miniprogram-ci') const path = require('path') const mainfest = require('../src/manifest.json') const slog = require('single-line-log').stdout const robot = Number(process.env.ROBOT) || 1 const buildVersion = process.env.npm_config_build_version || mainfest.versionName function getUploadDesc() { // dev if (robot === 1) { return 'build by robot --dev' } // test if (robot === 2) { return 'build by robot --test' } // release if (robot === 3) { return 'build by robot --release' } // uat if (robot === 4) { return 'build by robot --uat' } return mainfest.description } async function main() { const project = new ci.Project({ appid: mainfest['mp-weixin'].appid, //appid type: 'miniProgram', projectPath: path.resolve(__dirname, '../dist/build/mp-weixin'), //项目路径 privateKeyPath: path.resolve(__dirname, `./private.${mainfest['mp-weixin'].appid}.key`), //小程序后台的上传密匙 ignores: ['node_modules/**/*'] }) let slogIndex = 0 try { await ci.upload({ project, version: buildVersion, desc: getUploadDesc(), setting: mainfest['mp-weixin'].setting, robot, onProgressUpdate: () => { slog('上传中' + (slogIndex === 0 ? '.' : slogIndex === 1 ? '..' : '...') + '\n') slogIndex++ if (slogIndex === 3) { slogIndex = 0 } } }) console.log(`上传成功 版本${buildVersion}`) } catch (error) { console.error(`上传失败 版本${buildVersion}`, error) } } main()
我们还有个 prebuild.js 用于不同的环境设置不同的 appid
const fs = require('fs') const process = require('process') function outputManifest() { const manifest = require('../src/manifest.json') manifest['mp-weixin'].appid = process.env.BUILD_ENV === 'uat' ? 'wx***' : 'wx***' fs.writeFileSync('./src/manifest.json', JSON.stringify(manifest, null, 2) + '\n', 'UTF-8') } outputManifest()
那么在 package.json 的 scripts 设置命令如下
"build-dev": "cross-env BUILD_ENV=dev node ./ci/prebuild.js && cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service --mode dev uni-build --minimize && cross-env ROBOT=1 node ./ci/autoUpload.js",
标签:ci,const,微信,require,robot,miniprogram,appid,浅析 From: https://www.cnblogs.com/goloving/p/17396314.html