@bufbuilding/protoc-gen-connect-query (英语)
连接查询的代码生成器, 扩展包 TanStack 查询 (反应-清空),可以与会说话的服务器进行无心通信 连接协议。 。 。 .
了解更多关于连接查询的信息 github.com/bufbuilding/接通-query (英语)。 。 。 .
安装
protoc-gen-connect-query 用于协议缓冲编译器的代码生成器插件, 如 库夫 财务报告和审定财务报表 原型它从您的协议缓冲计生成客户端,并与
@ bufbuilt/ protoc- gen- s,用于所有协议缓冲基准类型的代码生成器插件。 这两个插件生成的代码需要运行时库 @ bufbuilding/ 连接- query,以及 @ bufbuilding/ protobuf。 。 。 .
要安装插件及其运行时库, 运行 :
npm install --save-dev @bufbuild/protoc-gen-connect-query @bufbuild/protoc-gen-es
npm install @bufbuild/connect-query @bufbuild/protobuf
我们使用对等依赖来保证代码生成器和运行时库相互兼容. 请注意,纱线和pnpm只发出警告 在本案中.
生成代码
example.proto
对于这些例子,请考虑以下实例: example.proto数字 :
syntax = "proto3";
package example.v1;
message Nothing {}
message Todo {
string id = 1;
string name = 2;
bool completed = 3;
}
message Todos {
repeated Todo todos = 1;
}
service TodoService {
rpc GetTodos(Nothing) returns (Todos);
rpc AddTodo(Todo) returns (Nothing);
}
此文件创建了 RPC 服务, 内容如下 :
GetTodos不取输入并返回一组Todo编号.AddTodo添加一个新的Todo却一无所获.
buf.gen.yaml
添加新配置文件 buf.gen.yaml
version: v1
plugins:
# This will invoke protoc-gen-es and write output to src/gen
- name: es
out: src/gen
opt: target=ts
# This will invoke protoc-gen-connect-query
- name: connect-query
out: src/gen
opt: target=ts
与 buf 国 际
用来使用 buf CLI (中文(简体) ) 生成项目中所有 protobuf 文件的代码,只需运行:
npx @bufbuild/buf generate
请注意:
buf可以从各种 投入不仅仅是本地原始文件 譬如说,npm run generate buf.build/connectrpc/eliza生成模块的代码 连接/ eliza 在Buf Schema登记.
与 protoc
PATH=$PATH:$(pwd)/node_modules/.bin \
protoc -I . \
--es_out src/gen \
--es_opt target=ts \
--connect-query_out src/gen \
--connect-query_opt target=ts \
example.proto
请注意,我们正在增加 node_modules/.bin 页:1 $PATH,这样协议缓冲编译器就可以找到它们。 Npm 脚本会自动发生这种情况.
注:由于线条v2及以上不使用a
node_modules目录中,您需要稍微修改变量 :PATH=$(dirname $(yarn bin protoc-gen-es)):$(dirname $(yarn bin protoc-gen-connect-es)):$PATH
带节点
添加行到 scripts 区域 package.json 要运行 buf generate。 。 。 .
"scripts": {
...
"buf:generate": "npx @bufbuild/buf generate example.proto"
},
最后,告诉Buf通过运行命令生成代码:
npm run buf:generate
现在你应该看看你生成的代码:
.
└── gen/
├── example_pb.ts
└── example-TodoService_connectquery.ts
生成输出
Connect-Query将为每个protofile中的每个服务创建一个输出文件. 说您有以下文件结构 :
.
└── proto/
├── pizza.proto
└── curry.proto
何处 pizza.proto 包含 DetroitStyleService 财务报告和审定财务报表 ChicagoStyleService,并在哪里 curry.proto 包含 VindalooService。您生成的输出会像这样 :
.
└── gen/
├── pizza_pb.ts
├── pizza-DetroitStyleService_connectquery.ts
├── pizza-ChicagoStyleService_connectquery.ts
├── curry_pb.ts
└── curry-VindalooService_connectquery.ts
每个服务得到一个单独文件的原因 是为了方便了解和了解 语言服务器协议导入。通知每个输入原型生成一个文件 protoc-gen-es (单位:千美元)pizza_pb.ts 财务报告和审定财务报表 curry_pb.ts),每个服务创建一个文件 protoc-gen-connect-query (组成其余部分)。 Protobuf-ES生成文件(*_pb.ts)很重要,因为这些文件来自 *_connectquery.ts 文档.
插件选项
target
此选项控制插件是否生成 JavaScript, TypeScript, 或 TypeScript 声明文件 .
比如说,你用过 example.proto数字 :
| 目标 | 生成输出 |
|---|---|
target=js | example-TodoService_connectquery.js |
target=ts | example-TodoService_connectquery.ts |
target=dts | example-TodoService_connectquery.d.ts |
可以通过将它们与 +,例如 target=js+dts。 。 。 .
默认情况下,我们生成了JavaScript和TypeScript声明文件,它们产生最小的代码大小并是最能与各种捆绑器配置兼容的. 如果您喜欢生成类型脚本, 请使用 target=ts。 。 。 .
import_extension=.js
默认, 原型- 基因- 连接- query (和基于 @ bufbuilding/ protoplugin (英语)使用 a .js 导入路径中的文件扩展名,甚至在TypeScript文件中.
这是不直观的,但必需的 节点.js中的ECMAScript模块。 。 。 .
不幸的是,并非所有的捆绑者和工具都赶上了,而德诺要求 .ts。使用此插件选项,可以替换 .js 在带有给定值的导入路径中扩展 。 例如,设定
import_extension=none删除.js扩展import_extension=.ts替换.js扩展名.ts
keep_empty_files=true
此选项适用于其他插件, 但不适用于 protoc-gen-connect-query 因为与其他大多数插件不同,它不会为每个输入原生文件产生最多一个输出文件. 相反,它每个服务生成一个输出文件. 如果您提供了无效的原型文件, 其中没有服务, protoc-gen-connect-query 将没有输出.
生成代码示例
见 example.proto 财务报告和审定财务报表 eliza.proto 例如输入和查看 这里 以查看这些文件生成的输出.