Skip to content

Commit 9418427

Browse files
committed
release: v1.6.0
1 parent f076efd commit 9418427

11 files changed

Lines changed: 1063 additions & 4 deletions

File tree

CHANGELOG.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,43 @@
1+
v1.6.0 / 2024-02-07
2+
===================
3+
4+
### 🐛 Bug Fixes
5+
6+
- `general`
7+
- 在生成swagger tags的默认模块前增加已存在相同模块判断
8+
- 修复api tags不存在或为空时补充默认tag的逻辑
9+
- 提取默认模块名为常量
10+
- #391 枚举包含数值时,生成的类型声明重复
11+
- #378 修复surrounding为typeScript时不生成pontCore的问题
12+
- #332 OpenAPI 下,POST 请求,同时存在路径参数与请求体参数时,路径参数丢失
13+
- #182 Swagger中不存在顶层tags时根据interface自动生成
14+
- #182 SwaggerV2根元素无tags时,mod生成失败
15+
16+
17+
### 🚀 Features
18+
19+
- `general`
20+
- #394 支持自定义翻译文件的生成路径
21+
- #390, #403 Use tags in operation-object when global tags is empty
22+
23+
24+
### 🏡 Chore
25+
26+
- `general`
27+
- Copy readme when publish
28+
- `deps`
29+
- Bump word-wrap from 1.2.3 to 1.2.4
30+
- Bump semver from 6.0.0 to 6.3.1 in /examples/hooks-app
31+
- `deps-dev`
32+
- Bump semver from 7.1.1 to 7.5.2
33+
34+
35+
### 💖 Thanks to
36+
37+
- FrankCheung
38+
- dependabot[bot]
39+
- 芒星
40+
141
v1.5.12 / 2023-07-28
242
===================
343

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "pont",
33
"private": true,
4-
"version": "1.5.12",
4+
"version": "1.6.0",
55
"license": "MIT",
66
"workspaces": [
77
"packages/*"

packages/pont-engine/README.md

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
2+
<div align="center">
3+
4+
[![Pont logo](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/332171/1648553869584-66c3761b-79f5-466d-92e4-ed4c6cdd3cf1.png#clientId=u9fdc963e-89e2-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=154&id=ub6370ba6&name=%E6%A1%A5%E6%A2%81.png&originHeight=200&originWidth=200&originalType=binary&ratio=1&rotation=0&showTitle=false&size=3585&status=done&style=none&taskId=ua3612409-5685-4d87-8de5-6cf3a398aea&title=&width=154)](https://github.com/alibaba/pont)
5+
6+
# Pont - 搭建前后端之桥
7+
8+
[![npm version](https://badge.fury.io/js/pont-engine.svg)](https://www.npmjs.com/package/pont-engine)
9+
[![npm downloads](https://img.shields.io/npm/dm/pont-engine.svg?style=flat-square)](https://www.npmjs.com/package/pont-engine)
10+
[![GitHub license](https://img.shields.io/github/license/alibaba/pont)](https://github.com/alibaba/pont/blob/master/LICENSE)
11+
[![Gitter](https://badges.gitter.im/jasonHzq/pont-engine.svg)](https://gitter.im/jasonHzq/pont-engine?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
12+
13+
![Pont Process](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/332171/1648634133414-a1f46be4-f9a7-4c1e-85fd-71d38594fbd0.png#clientId=u9fdc963e-89e2-4&crop=0&crop=0&crop=1&crop=1&id=mNKTs&name=image.png&originHeight=1090&originWidth=1584&originalType=binary&ratio=1&rotation=0&showTitle=false&size=192016&status=done&style=none&taskId=u6b14950f-c9a8-484b-b4ca-d82b93677a6&title=)
14+
15+
</div>
16+
17+
pont 在法语中是“桥”的意思,寓意着前后端之间的桥梁。Pont 把 swagger、rap、dip 等多种接口文档平台,转换成 Pont 元数据。Pont 利用接口元数据,可以高度定制化生成前端接口层代码,接口 mock 平台和接口测试平台。
18+
19+
其中 swagger 数据源,Pont 已经完美支持。并在一些大型项目中使用了近两年,各种高度定制化需求都可以满足。
20+
21+
Pontx 用户请访问 [Pontx](https://github.com/pontjs/pontx)
22+
23+
## ✨特性
24+
25+
- **跨语言** 天然支持 Javascript 项目及 Typescript 项目。如果使用 `Java``C++` 等语言,可定制代码生成器支持
26+
- **支持高度定制化** 通过复写内部方法,各种高度定制化需求都可以满足
27+
- **VSCode 插件支持** 专门为 Pont 开发的 VSCode 插件 vscode-pont,完美支持 Pont 所有能力
28+
- **丰富的命令行**提供丰富的命令行命令,满足不同场景的使用
29+
- **自动化 mocks 服务**Pont 自动生成所有 mocks 数据,并提供所有接口的 mocks 服务
30+
31+
## ⚡快速开始
32+
33+
### 1. 安装
34+
35+
全局安装 pont-engine
36+
37+
```bash
38+
# 选择一个你喜欢的包管理器
39+
40+
# NPM
41+
$ npm i -g pont-engine
42+
43+
# Yarn
44+
$ yarn global add pont-engine
45+
46+
# pnpm
47+
$ pnpm add -g pont-engine
48+
```
49+
50+
### 2. 初始化
51+
52+
使用 `pont start` 命令,快速创建初始模板
53+
![test9.gif](https://intranetproxy.alipay.com/skylark/lark/0/2022/gif/332171/1648558306636-c144cbfc-ff71-4822-996b-680b397915bf.gif#clientId=u9fdc963e-89e2-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=423&id=PGyYc&name=test9.gif&originHeight=750&originWidth=1329&originalType=binary&ratio=1&rotation=0&showTitle=false&size=650633&status=done&style=none&taskId=uf925e5ee-b701-4994-925c-75b4c2214f1&title=&width=749.5)
54+
55+
### 3. 安装 VSCode 插件
56+
57+
打开 VSCode 插件商店,输入 `vscode-pont` 搜索安装
58+
![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/332171/1648630306151-7398a852-370b-4c41-80e5-c435b8003932.png#clientId=u9fdc963e-89e2-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=423&id=ue189ea7d&name=image.png&originHeight=676&originWidth=1192&originalType=binary&ratio=1&rotation=0&showTitle=false&size=109566&status=done&style=none&taskId=u02872ef9-c6f9-47e5-beb7-d8a6c4343fb&title=&width=745)
59+
60+
####
61+
62+
### 4. 沉浸式接口开发
63+
64+
插件安装成功后,点击 Pont 图标,打开面板进行进一步操作。更多插件相关请参考 [插件文档](https://marketplace.visualstudio.com/items?itemName=jasonHzq.vscode-pont)
65+
![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/332171/1648630408341-fc30aa88-564b-4001-a6c4-50212b494fb3.png#clientId=u9fdc963e-89e2-4&crop=0&crop=0&crop=1&crop=0.4901&from=paste&height=529&id=u6648fb46&name=image.png&originHeight=770&originWidth=1082&originalType=binary&ratio=1&rotation=0&showTitle=false&size=81838&status=done&style=none&taskId=u83ce7020-1417-44c3-ba81-2fc285170b8&title=&width=744)
66+
67+
点击接口代码片段图标,打开接口列表,搜索后生成接口代码片段,快速开始接口开发
68+
![test12.gif](https://intranetproxy.alipay.com/skylark/lark/0/2022/gif/332171/1648629476436-1140ba66-111e-43b5-81d1-07dfddb1c1b8.gif#clientId=u9fdc963e-89e2-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=319&id=JpkUS&name=test12.gif&originHeight=547&originWidth=1281&originalType=binary&ratio=1&rotation=0&showTitle=false&size=808877&status=done&style=none&taskId=uc33a7057-e0e6-426c-8fb2-48217e122ff&title=&width=747.5)
69+
70+
### 5. 联调维护
71+
72+
实时发现后端接口更新
73+
![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/332171/1648629880109-3948a84c-88ad-4d0c-b6b3-debfeabf361f.png#clientId=u9fdc963e-89e2-4&crop=0&crop=0&crop=1&crop=0.6761&from=paste&height=414&id=gs9QO&name=image.png&originHeight=644&originWidth=1158&originalType=binary&ratio=1&rotation=0&showTitle=false&size=113103&status=done&style=none&taskId=uaaef3281-3150-4144-a772-a9c9f2f1e17&title=&width=744)
74+
更新接口层后,可迅速定位接口调用代码,进行调用修改。
75+
![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/332171/1648632170521-66dadabd-54c6-4c0a-ac00-c6b4d49d5bc6.png#clientId=u9fdc963e-89e2-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=311&id=PbZKX&name=image.png&originHeight=616&originWidth=1478&originalType=binary&ratio=1&rotation=0&showTitle=false&size=300123&status=done&style=none&taskId=u2749c27e-321c-4241-9aff-f8a1a25befc&title=&width=745)
76+
77+
### 6. 自定义
78+
79+
Pont 支持自定义**数据获取 、数据源预处理、自定义代码生成器**等。请参考 [定制化 Pont](./docs/customizedPont.md)
80+
81+
### 7. 提示
82+
83+
- 确保服务端使用 Swagger(目前只支持 Swagger V2、V3),提供的数据源接口是免登录的。如果不是,请后端帮忙简单配置一下,或者使用 [fetchMethodPath 配置](./docs/customizedPont.md#fetchmethodpath),通过自定义**数据获取**来获取带鉴权的接口的文档。
84+
- 若需替换默认的请求信息,请参阅 [pontCore](https://github.com/alibaba/pont/tree/master/docs/pontCore.md)
85+
86+
## 🔍 文档
87+
88+
[命令行](./docs/CMD.md)
89+
90+
[标准数据源模型](./docs/standardDataSource.md)
91+
92+
[pont-config.josn 配置项](./docs/pontConfig.md)
93+
94+
[定制化 Pont](./docs/customizedPont.md)
95+
96+
[VSCode 插件](https://marketplace.visualstudio.com/items?itemName=jasonHzq.vscode-pont)
97+
98+
## 自动化 mocks 服务
99+
100+
mocks.enable 配置为 true,pont 将自动生成所有 mocks 数据,并提供所有接口的 mocks 服务。此外 IDE 提供如下功能
101+
102+
- 右键 pont 接口代码,可以跳转(jump to mock position)去编辑接口的 mocks 数据
103+
- 右键 pont 接口代码,可以访问(visit mocks interface) GET 类型的 mocks 接口。
104+
105+
mocks 自动生成所有 mocks 数据,你也可以自由更新 mocks 数据,支持 [mockjs](http://mockjs.com/examples.html) 语法更新 mocks 数据。
106+
107+
## demo
108+
109+
参考下面的例子,来体验 pont。
110+
111+
- [pont-demo](https://github.com/nefe/pont-demo)
112+
- [nuxt-ts-pont-demo](https://github.com/gaoletian/nuxt-ts-pont-demo)
113+
114+
## 👍 最佳实践
115+
116+
- 项目 pre-commit hook 中,加上 pont check,防止本地数据源被研发人员损坏。
117+
- 很多 Swagger 所有的接口返回的类型都类似是 Result,主要是囊括了约定的接口错误字段,类似 `{ errorCode: 0, data: T, errMessage: '' }`。这里建议,让后端 Swagger 的接口返回类型,去掉这个 Result 外壳。只返回 data 的 T 类型。
118+
- vscode 配置 `trigger suggest` 的快捷键(cmd K + cmd S),传参时,用快捷键触发提醒,非常好用;
119+
- pont template 配置 API、defs 为全局变量;这样不需要 import 任何接口、实体类;使用 API 直接触发建议找到 模块、接口,非常方便
120+
- 快捷键 cmd + ctrl + p 进行接口查找,非常方便;
121+
- 善于利用实体类(defs),可以当成类型用、也可以作为逻辑实现的辅助;实体类是后端写得实体类,前端自己写实体类,既没有必要,长期来看也会和后端的实现差异越来越大。如果有自定义逻辑,继承 defs 实体类即可。
122+
- redux 项目,建议结合 [https://github.com/nefe/iron-redux](https://github.com/nefe/iron-redux),一个致力类型完美和去冗余的轻量化 redux 库。例如类型友好的,运行安全的 get 方法:[https://github.com/nefe/iron-redux#safeget](https://github.com/nefe/iron-redux#safeget)
123+
124+
## ❓常见问题
125+
126+
1. demo 中,生成代码的 pontFetch 函数,是要自己实现的吗?
127+
答:pontFetch 是用户自己项目的请求公共方法。因为每个项目的接口有自己的业务逻辑,比如如何判断接口返回的结果是否正确,所以 pont 的默认模板并没有自己实现一套 fetch 方法。另外 Pont 生成的代码是可以用自定义模板配置的。可以在模板上更改 pontFetch 的引用路径和名字。
128+
1. nestjs 搭配的 Swagger JSON 生成出来的 pont 文件为什么没有 mods?
129+
答:nestjs 中的 Swagger 必须在每个 Controller 上添加 ApiUseTags 装饰器,并且在每个控制器的方法上添加 ApiOperation 装饰器 才能正确输出带 Tags 以及 operationId 的 Swagger JSON。Tags 和 operationId 是 pont 必需的(@nestjs/swagger 自动生成的 default Tags 暂时不被兼容)。
130+
示例如下 (`@nestjs/swagger@^3`)
131+
对于 `@nestjs/swagger@^4`,需要如下配置来手动注册 Tag
132+
133+
```
134+
import { Controller } from '@nestjs/common';
135+
import { ApiUseTags, ApiOperation, ApiOkResponse } from '@nestjs/swagger';
136+
137+
@ApiUseTags('pet')
138+
@Controller('pet')
139+
export class PetController {
140+
@ApiOperation({ title: 'getDog', operationId: 'getDog' })
141+
@Get()
142+
getDog() {}
143+
}
144+
```
145+
146+
```typescript
147+
// ...
148+
const options = new DocumentBuilder().setTitle('your app').addTag('pet').build();
149+
const document = SwaggerModule.createDocument(app, options);
150+
SwaggerModule.setup('/api', app, document);
151+
```
152+
153+
3. API、defs 全局变量找不到
154+
答:将 pont 生成的 api.d.ts 塞到 tsconfig.json 中的 includes 数组最前面。并在项目入口处 import pont 生成的入口文件。
155+
156+
```json
157+
{
158+
"compilerOptions": {
159+
"allowJs": true,
160+
"checkJs": true,
161+
"outDir": "./**"
162+
},
163+
"include": ["./services/api.d.ts", "./src"],
164+
"exclude": []
165+
}
166+
167+
```
168+
169+
## 其它接口平台接入
170+
171+
目前 pont 支持 [Swagger](https://swagger.io/) V2 V3 三种数据源。其他类型数据源只需要在 scripts 中添加对应的数据格式转换文件,把对应数据格式转换为 pont 标准格式,即可适配新的数据源类型。希望社区可以踊跃贡献代码,接入更多类型的数据源!
172+
173+
## 钉钉用户群
174+
175+
群号:33661609
176+
177+
## 🎉 谁在使用
178+
179+
- 阿里巴巴
180+
181+
> 我们在这里列出了部分使用者,如果你的公司和产品使用了 Pont,欢迎到 [这里](https://github.com/alibaba/pont/issues/301) 留言。

packages/pont-engine/docs/CMD.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# 命令行使用方法
2+
3+
目前 pont 以 vscode 插件 —— [vscode-pont](https://marketplace.visualstudio.com/items?itemName=jasonHzq.vscode-pont) 来提供 pont 的元数据能力。其它 IDE 的插件也将逐渐提供,这里非常渴望社区的力量。
4+
5+
为了避免一部分用户和技术团队不使用 [vscode-pont](https://marketplace.visualstudio.com/items?itemName=jasonHzq.vscode-pont),pont 可以以命令行命令的方式来提供服务。
6+
7+
命令行提供的命令目前还比较基础,提供命令如下:
8+
9+
| 命令 | 描述 |
10+
| --- | --- |
11+
| pont start | 一键接入 pont,若本地存在 [pont-config.json](./pontConfig.md)配置文件,将覆盖重复的配置项 |
12+
| pont check | 校验本地的 pont-lock.json 文件是否缺失、损坏。建议用户在项目中,在 pre-commit 里加上 pont check 命令,以防止在团队协作过程中,pont-lock.json 被误删、解决该文件冲突时被损坏等情况 |
13+
| pont scan | 扫描未使用的接口,在 process.cwd()位置生成并写入 unusedRequests.json 文件,需要配置 scannedRange。请参考 [pont-config.json 配置项](./pontConfig.md) |
14+
| pont ls | 查看所有数据源 |
15+
| pont select [dsName] | 切换当前数据源 |
16+
| pont diff | 查看远程数据和本地数据在模块、基类上的差异,以作针对性、选择性同步 |
17+
| pont updateMod [modName] | 选择性更新本地的模块 |
18+
| pont updateBo [boName] | 选择性更新本地的基类 |
19+
20+
21+
![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/332171/1648467606899-487b668d-1a23-4ff4-b4b5-43e881885057.png#clientId=u8becc08d-fe3e-4&crop=0&crop=0&crop=1&crop=0.9817&from=paste&height=338&id=u3912945f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=676&originWidth=1842&originalType=binary&ratio=1&rotation=0&showTitle=false&size=191780&status=done&style=none&taskId=u54a3866f-0cd1-449c-aed8-ae05d59cec1&title=&width=921)
22+
23+
![test2.gif](https://intranetproxy.alipay.com/skylark/lark/0/2022/gif/332171/1648468264010-a2be8d0f-fe59-43aa-bb5e-4ff0585b601c.gif#clientId=u8becc08d-fe3e-4&crop=0&crop=0&crop=1&crop=0.5889&from=paste&height=441&id=u256a584f&margin=%5Bobject%20Object%5D&name=test2.gif&originHeight=543&originWidth=920&originalType=binary&ratio=1&rotation=0&showTitle=false&size=28790&status=done&style=none&taskId=u6de847fe-f06d-4789-99d6-ef3569a4ef2&title=&width=748)

0 commit comments

Comments
 (0)