创建一个带有triggers的应用
开始之前
通过本教程可以了解应用开发大致流程,帮助开发者快速上手,开发出具有理想功能的应用。
本文将通过实现一个简单的日志上报应用,通过自定义 function 和事件相关 trigger 实现,在用户新建和删除事项时,捕捉到事项信息,进行请求的过程,展示开发必备的流程和步骤。
开始之前,请确保本地已安装以下环境:
第一步:创建应用
- 安装/更新
@giteeteam/apps-cli
npm install -g @giteeteam/apps-cli
npm update -g @giteeteam/apps-cli
- 利用脚手架 cli,初始化应用
giteeteam-apps init
-
按照指令输入插件名称以及唯一 app_key
-
创建完成,主要目录结构如下:
apps_demo:
.
├── README.md # 插件说明文档
├── functions # 开发function的位置
├── manifest.yml # 插件描述文件
├── public
├── src # 插件前端代码
├── tsconfig.json
├── typings.d.ts
├── webpack.config.js
├── package.json
└── yarn.lock
第二步:开发应用功能
1. manifest.yml
- Manifest 描述应用的配置信息,同时也是串联各个功能模块的导航。详见 manifest。
- app:定义应用基础信息,定义应用版本
- modules:定义包含应用逻辑的函数,以及应用使用的不同模块。
- function:定义基础功能函数,定义函数唯一 key。本示例中分别定义两个 function,对应 item created 和 deleted 时触发相应功能。
- trigger:绑定事件触发,并关联函数 key。本示例中利用应用中心封装好的事件,定义 function 的触发时机。
app:
name: apps_demo
key: apps_demo
version: '0.0.1'
modules:
trigger:
- key: item_trigger_created
events:
- gei:proxima:item:created
function: created-function
- key: item_trigger_deleted
events:
- gei:proxima:item:beforeDelete
function: delete-warning-function
function:
- key: created-function
handler: itemsTrigger.whenCreateItem
- key: delete-warning-function
handler: itemsTrigger.whenDeleteItem
2. 功能开发
- 在 tsconfig.json 中引入文件
{
"include": ["src/**/*", "typings.d.ts", "functions/*"]
}
- 开发 whenCreateItem 和 whenDeleteItem 两个功能 function,放置在 functions 目录下 itemsTrigger 文件内,同时通过 import 关键字引入其他二级目录下函数
├── functions
│ ├── itemsFunction
│ │ ├── itemsCreated.ts
│ │ ├── itemsDeleted.ts
│ │ └── sendMessage.ts
│ ├── itemsTrigger.ts
./functions/itemsTrigger.ts
import { afterCreated } from './itemsFunction/itemsCreated';
import { afterDeleted } from './itemsFunction/itemsDeleted';
export const whenCreateItem = async ({ payload }) => {
const { item } = payload;
if (item?.key) {
await afterCreated(item);
return { code: 200 };
}
return { code: 400 };
};
export const whenDeleteItem = async ({ payload }) => {
const { item } = payload;
if (item?.key) {
await afterDeleted(item);
return { code: 200 };
}
return { code: 400 };
};
./functions/itemsFunction/itemsCreated.ts
import { sendMsg } from './sendMessage';
export const afterCreated = async (item: any) => {
// console.log("got created item:", JSON.stringify(item));
await sendMsg(item);
return;
};
./functions/itemsFunction/itemsDeleted.ts
import { sendMsg } from './sendMessage';
export const afterDeleted = async (item: any) => {
// console.log("got deleted item:", JSON.stringify(item));
await sendMsg(item);
return;
};
- 在对应方法内开发相关功能,例如使用 axios 进行网络请求
./functions/itemsFunction/sendMessage.ts
import { axios } from '@giteeteam/apps-api';
export const sendMsg = async (item: any) => {
// do your job
// exp: send message using axios
console.log('sendMsg:', item.objectId);
await axios({
url: 'http://localhost:1337',
method: 'get',
})
.then(response => {
console.log('got response ', response);
})
.catch(error => {
console.log('got error ', error);
});
};
第三步:打包,发布到线上开发环境
1. 登陆调试环境
使用登录命令(详细参数请参考:Login),登录到调试环境。
giteeteam-apps login
2. 构建应用
构建完成后输出的制品格式是 *.zip
yarn build-app
build-app
命令在 package.json
中已经定义
3. 发布应用(开发环境)
将上一步构建的应用包发布。(详细参数请参考:Deploy)
giteeteam-apps deploy xxx.zip
4. 在开发者中心中为租户订阅该应用
http://demo.com/apps/page/application/developer
第四步:本地调试
- 确保本地 docker 启动
- 使用 tunnel 命令(详细参数请参考:Tunnel)开启本地调试
giteeteam-apps tunnel
- 登陆环境,进行新建事项与删除事项操作,观察本地调试结果,调试代码
第五步:线上部署
- 打开应用市场
- 创建应用,上传应用 zip
- 点击"订阅"