
# jzy-mini-program

#### 介绍
`jzy-mini-program`是一个小程序端构建后支持 CI（持续集成）的插件，支持上传微信、企业微信、钉钉、支付宝平台的小程序。

## 安装


### 全局安装  

```sh

# 使用 npm
npm i jzy-mini-program -g

或者

# 使用 yarn
yarn global add jzy-mini-program

```


### 局部安装
```sh

# 使用 npm
npm i jzy-mini-program --save-dev

或者

# 使用 yarn
yarn add jzy-mini-program -D

```

## 特性
- 支持微信、支付宝、钉钉小程序的上传
- 支持微信、支付宝、钉钉小程序指定版本号
- 支持设置支付宝、钉钉小程序版本号自增
- 其他小程序平台增加中...


## 配置


### 配置文件

你可以使用`.minicirc`文件配置`jzy-mini-program`，在根目录下创建`.minicirc`文件

```json
// .minicirc
{
  "weixin": {
    "appid": "微信小程序appid",
    "privateKeyPath": "密钥文件相对项目根目录的相对路径，例如 key/private.appid.key",
    "projectPath": "微信小程序产物目录，例如 dist/build/mp-weixin"
  },
  "alipay": {
    "appid": "支付宝小程序appid",
    "toolId": "支付宝开放平台工具ID",
    "privateKey": "私钥文本内容",
    "projectPath": "支付宝小程序产物目录，例如 dist/build/mp-alipay",
    "autoincrement": true
  },
  "dd": {
    "appid": "钉钉小程序appid,钉钉开发者后台的 MiniAppId 选项",
    "token": "钉钉开发者后台的 API Token",
    "projectPath": "钉钉小程序产物目录，例如 dist/build/mp-alipay",
    "autoincrement": true
  },
  "version": "0.0.1",
  "desc": "版本描述"
}

```

### 添加命令

添加一条 [npm run script](https://docs.npmjs.com/cli/v9/commands/npm-run-script) 到 `package.json` 中:
```json
{
  "scripts": {
    // 上传到微信小程序
    "upload:weixin": "minici --platform weixin",
    // 上传到支付宝小程序
    "upload:alipay": "minici --platform alipay",
    // 上传到钉钉小程序
    "upload:dd": "minici --platform dd"
  }
}
```
目前`jzy-mini-program`支持一个选项`--platform`，目前支持的平台为：
- `weixin` 微信/企业微信
- `alipay` 支付宝小程序
- `dd` 钉钉小程序

## 上传小程序
配置完成后，可以在终端中执行命令进行上传操作：
- 执行`yarn upload:weixin` 命令上传到微信小程序
- 执行`yarn upload:alipay` 命令上传到支付宝小程序
- 执行`yarn upload:dd` 命令上传到钉钉小程序


我们也可以将上传命令与打包命令组合起来使用，例如：

```json
{
  "scripts": {
    // 打包并上传到微信小程序
    "upload:mp-weixin": "uni build -p mp-weixin && minici --platform weixin",
    // 打包并上传到支付宝小程序
    "upload:mp-alipay": "uni build -p mp-alipay && minici --platform alipay",
    // 打包并上传到钉钉小程序
    "upload:mp-dingtalk": "uni build -p mp-dingtalk && minici --platform dd"
  }
}
```

## 注意
> 支付宝和钉钉小程序不支持上传的版本号小于或等于现有版本号，我们在测试环境调试可能会频繁的修改代码并上传，所以每次上传操作都指定版本号并不现实。针对这一问题，我们提供了`autoincrement`字段用于配置版本号是否自增，配置此字段为`true`时，`jzy-mini-program`会忽略配置文件中的`version`字段，并且上传版本号会在当前版本的小版本号上加一。而生产环境则不建议配置`autoincrement`字段，特殊情况可灵活使用。

## API

待写

### 模型定义

```ts
/**微信小程序类型 */
export type ProjectType = 'miniProgram' | 'miniGame' | 'miniProgramPlugin' | 'miniGamePlugin'

/** 微信小程序配置 */
export interface WeixinConfig {
  /** 微信小程序产物目录 */
  projectPath?: string
  /** 小程序/小游戏项目的 appid */
  appid: string
  /** 私钥文件路径，在获取项目属性和上传时用于鉴权使用 */
  privateKeyPath: string
  /** 类型，默认miniProgram 小程序 */
  type?: ProjectType
  /** 上传需要排除的目录 */
  ignores?: Array<string>
  /** 指定使用哪一个 ci 机器人，可选值：1 ~ 30 */
  robot?: number
  /** 预览和上传时的编译设置 */
  setting?: {
    /** 对应于微信开发者工具的 "es6 转 es5" */
    es6: boolean
    /** 对应于微信开发者工具的 "增强编译" */
    es7: boolean
    /** "增强编译" 开启时，是否禁用JS文件严格模式，默认为false */
    disableUseStrict: boolean
    /** 上传时压缩 JS 代码 */
    minifyJS: boolean
    /** 上传时压缩 WXML 代码 */
    minifyWXML: boolean
    /** 上传时压缩 WXSS 代码 */
    minifyWXSS: boolean
    /** 上传时压缩所有代码，对应于微信开发者工具的 "上传时压缩代码" */
    minify: boolean
    /** 对应于微信开发者工具的 "上传时进行代码保护" */
    codeProtect: boolean
    /** 对应于微信开发者工具的 "上传时样式自动补全" */
    autoPrefixWXSS: boolean
  }
}
/** 支付宝小程序终端类型 */
export type AlipayClientType =
  /** 支付宝 */
  | 'alipay'
  /** AMPE */
  | 'ampe'
  /** 高德 */
  | 'amap'
  /** 天猫精灵 */
  | 'genie'
  /** ALIOS */
  | 'alios'
  /** UC */
  | 'uc'
  /** 夸克 */
  | 'quark'
  /** 口碑 */
  | 'koubei'
  /** loT */
  | 'alipayiot'
  /** 菜鸟 */
  | 'cainiao'
  /** 阿里健康(医蝶谷) */
  | 'alihealth'
  /** 阿里医院 */
  | 'health'

/** 支付宝系列小程序配置 */
export interface AlipayConfig {
  /** 支付宝小程序产物目录 */
  projectPath?: string
  /** 小程序appid */
  appid: string
  /** 工具id */
  toolId: string
  /** 私钥文件路径，在获取项目属性和上传时用于鉴权使用(privateKeyPath和privateKey之间必须要填写其中一个) */
  privateKeyPath: string
  /** 私钥文本内容，在获取项目属性和上传时用于鉴权使用(privateKeyPath和privateKey之间必须要填写其中一个) */
  privateKey: string
  /** 上传的终端, 默认alipay */
  clientType?: AlipayClientType
  /** 是否版本号自增，配置后忽略 version 字段 */
  autoincrement?: boolean
}
/**钉钉小程序配置 */
export interface DingtalkConfig {
  /** 钉钉小程序产物目录 */
  projectPath?: string
  /** 钉钉小程序appid,即钉钉开放平台后台应用管理的 MiniAppId 选项（必填） */
  appid: string
  /** 令牌，从钉钉后台获取 */
  token: string
  /** 钉钉应用类型， 默认为:'dingtalk-biz' (企业内部应用) */
  projectType?: DingtalkProjectType
  /** 是否版本号自增，配置后忽略 version 字段 */
  autoincrement?: boolean
}

/**钉钉小程序类型 */
export type DingtalkProjectType =
  /** 第三方个人应用 */
  | 'dingtalk-personal'
  /** 第三方企业应用 */
  | 'dingtalk-biz-isv'
  /** 企业内部应用 */
  | 'dingtalk-biz'
  /** 企业定制应用 */
  | 'dingtalk-biz-custom'
  /** 工作台组件 */
  | 'dingtalk-biz-worktab-plugin'
/**配置参数 */
export interface CIOptions {
  /** 发布版本号，默认取 package.json 文件的 version 字段 */
  version?: string
  /** 版本发布描述， 默认取 package.json 文件的 description 字段 */
  desc?: string
  /** 微信小程序CI配置, 官方文档地址：https://developers.weixin.qq.com/miniprogram/dev/devtools/ci.html */
  weixin?: WeixinConfig
  /** 支付宝系列小程序配置，官方文档地址： https://opendocs.alipay.com/mini/miniu/api */
  alipay?: AlipayConfig
  /** 钉钉小程序配置 */
  dd?: DingtalkConfig
}


```
