首页 > 编程语言 >浅析微信小程序自动化部署miniprogram-ci介绍及实际使用

浅析微信小程序自动化部署miniprogram-ci介绍及实际使用

时间:2023-06-16 12:33:53浏览次数:34  
标签:ci const 微信 require robot miniprogram appid 浅析

一、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

相关文章

  • PCIe卡设计方案第631篇:单路12Gsps 3G 带宽模拟信号源PCIe卡
    单路12Gsps3G带宽模拟信号源PCIe卡 一、板卡概述    单路3G带宽模拟信号源卡由DA子卡和PCIe底板组成,二者通过标准FMC连接器互联,可以实现将PCIe总线数据转换为一路高速的模拟量输出。北京太速科技该板可广泛用于雷达、通信、光电领域的噪声信号、毛刺、......
  • 广告相关技术栈浅析
    在线实时竞价供应方平台(SSP):面向出版商(网站或移动应用的所有者),提供实时竞价的广告资源管理和销售平台,可以将出版商的广告资源与多个广告交易平台、需求方平台和广告网络进行关联,实现收益最大化。需求方平台(DSP):面向广告主或代理商,提供实时竞价的广告资源购买和投放平台,可以通过技术......
  • 微信小程序—智能小蜜(基于智能语义解析olami开放平台)
    概述该程序支持功能有查天气、查诗词、查百科、算算术、查日历、看笑话、看故事、聊天等,通过用户输入语句智能解析用户意图输出相应答案。详细一、准备工作1、电脑需要安装有微信web开发者工具,如果没有请点击这里安装:下载地址2、成为微信小程序开发者,需要用到appID,详......
  • python: enforcing type check on function using decorator
     deftypeassert(*ty_args,**ty_kwargs):"""利用装饰器对函数参数强制性类型检查enforcingtypecheckonfunctionusingdecorator:paramty_args::paramty_kwargs::return:"""......
  • 浅析CSS实现超过3行折叠并显示...查看详情
    要实现效果如下:尾部带查看详情,前面有三个点省略号。之前单独看这个布局,即使借助JavaScript也不是一件容易的事啊(需要计算文字宽度动态截取文本,然后append上三个点和查看详情。vue-clamp就是这么做的,包括很多博客也是这么讲的,但是讲真,如果是个列表,这种不断的判断,肯定不是......
  • 微信协议/ipad协议/个微协议/ipad8.0.37
    今天给大家介绍ipad登陆方法以及优缺点,希望可以帮到有需要的人ipad协议存在多种版本以及各有各的优缺点,而且利用协议可代写程序。也可以实现多种功能,群发,拉群,群活码,关键词回复等等 这篇文章主要讨论的是个人微信号目前几种接入的办法和路线。 仅供参考:主流的路线有如下几条: ......
  • 浅析视频监控技术及AI发展趋势下的智能化视频技术应用
    视频监控技术是指通过摄像机对指定区域进行实时视频直播、录制、传输、存储、管理和分析的技术系统。它可以用于监控各种场所,如校园、工厂、工地、工作场所、公共区域、交通工具等。视频监控技术主要涉及到以下几个部分:1、摄像机摄像机是视频监控技术的核心设备,它主要用于捕捉画......
  • Civil 3D 删除不需要的标签表达式
    正常情况下,不需要的标签表达式应该能够手动删除,不知道什么原因有些表达式在创建后状态就成了“被引用”状态,导致无法删除。即使想修改名称也不行,不得不采用编程的方式进行删除。代码如下:publicvoidm_RemoveExpression(){Documentdoc=......
  • https://sci-hub.io/ 吊炸天,各种论文随便下
    https://sci-hub.io/吊炸天,各种论文随便下。这个网站不支持直接搜索,不过不要紧,它提供了一个Chrome插件,安装好后,任何GoogleScholar的搜索结果打开都会跳转到sci-hub的论文下载页面。屌啊屌啊屌啊~插件哪里下载?打开上面的网址就知道!如果sci-hub.io打不开,可以试试https://yaguge.......
  • 微信菜单中的域名转发
    微信菜单中通常会设置一些URL,如果网站出现了域名迁移,菜单的URL也需要改。但微信菜单有个特性:修改菜单内容后,24小时之内才能更新到所有微信客户端。也就是说,24小时候,还是有用户会访问到老的域名。怎么办?在老的网站入口最顶上,加上如下PHP代码即可:$old_url='http://'.$_SERVER['HTTP......