UNPKG

3.83 kBMarkdownView Raw
1# dpro 插件开发
2
3`dpro` 开放了自定义开发插件能力,让开发者 `1s` 钟开发出自己的插件,提高生产效率,成为 钉钉闪电侠⚡️。开发者可以一起完善整个工具的插件生态。<br />由于需要支持 `dpro` 的开发链路调试,初始化插件脚手架的时候系统默认会以 `-D` 的模式,在插件目录运行安装 `dingtalk-cli-pro` 包,但发布插件的 `package.json` 没有依赖。
4
5
6## 开发插件
7```dart
8# 安装工具
9$ yarn global add dingtalk-cli-pro # 或者 tnpm install -g dingtalk-cli-pro
10# 安装插件
11$ dpro g ## 可交互命令行,按步骤操作
12# 开发插件
13$ vi index.js
14```
15
16
17### 使用案例
18![](https://intranetproxy.alipay.com/skylark/lark/0/2019/gif/40822/1565585291000-d1a9649a-21ba-465f-b7fd-404493c7feef.gif#align=left&display=inline&height=442&originHeight=442&originWidth=654&size=0&status=done&width=654)
19
20
21### 插件目录
22`index.js` 为插件主入口, `dingtalkrc.js` 为调试配置文件,可以通过此配置文件,加载当前插件。
23```javascript
24├── LICENSE.md
25├── babel.config.js
26├── dingtalkrc.js
27├── index.js
28├── jest.config.js
29├── package.json
30├── readme.md
31└── test
32 └── index.test.js
33```
34
35
36### 代码案例
37对于多个异步操作,插件开发同时支持 `async await`  方式,只需要把 `action(() => {})` 改写成 `action(async () => {})` 即可。
38
39```javascript
40module.exports = function(dingtalk) {
41 /**
42 * 命令行工具
43 * @see https://www.npmjs.com/package/commander
44 */
45 // 可以使用 dingtalk or this 作用域
46 dingtalk
47 // 注册插件命令 $ dpro helloworld
48 .registryCommand('helloworld')
49 // 插件命令描述
50 .description('welcome to dpro')
51 // 运行命令回调
52 .action(() => {
53 this.log.warn(`Hi ${this.getGitUserInfo().username}, Welcome to dpro`);
54 });
55}
56```
57
58
59## 脚手架插件开发
60
61### 生命周期
62```
63configuring -> writing -> install -> end
64```
65
66- configuring: 配置基础信息,配置模板地址(origin), 生成脚手架模板地址(target)
67- writing: 拷贝文件以及模板文件
68- install: 安装依赖
69- end: 结束脚手架,可以使用 `spawnCommand` 脚本开启项目工程
70
71## 调试插件
72通过 `dingtalkrc.js` 文件配置当前插件入口文件,数组形式可以加载多个插件,配置如下
73```javascript
74module.exports = {
75 "plugins": [
76 [
77 "./index.js"
78 ]
79 ]
80}
81```
82
83
84### 运行命令调试
85```dart
86$ dpro command # 命令
87```
88
89
90### vscode调试
91插件的开发调试支持VSCode调试, `dpro g ` 命令生成脚手架的时候预制了 `Plugin Param Test``Plugin Jest Test` 两种命令,可以运行 Vscode 的 debug 模式查看运行。
92
93- Plugin Param Test: 可以在Vscode 的 Debug 模式下设置断点
94- Plugin Jest Test: 可以跑 Jest 的测试用例 
95
96
97## 发布插件
98发布插件需要删除或者更改 `dingtalkrc.js` 文件,例如可以更改文件为 `dingtalk.prod.js` , 通过 `tnpm` 或者 `npm` 方式发布。
99```dart
100# 阿里内部插件
101$ tnpm publish
102# 公网使用插件
103$ npm publish
104```
105
106
107## API 接口
108
109### 1. 文件模块
110`dintalk.fs|this.fs`上下文对象, [Mem-fs-editor API参考文档](https://www.npmjs.com/package/mem-fs-editor)
111
112### 2. 命令行模块
113`dingtalk.registryCommand|this.registryCommand`上下文对象, [Commander API 参考文档](https://www.npmjs.com/package/commander)
114
115### 3. 可交互模块
116`dingtalk.prompt|this.prompt`上下文对象, [Inquirer API 参考文档](https://www.npmjs.com/package/inquirer)
117
118### 4. 日志模块
119`dingtalk.log|this.log`上下文对象, [Log API 参考文档](https://yuque.antfin-inc.com/dingcontent/on7glz/ngtz5w/lib/log.js)
120
121##
122
123## 常用插件列表
124
125### 1. 静态服务器
126```
127$ tnpm i dingtalk-plugin-serve -g
128```
129