使用proto3版本时生成pb文件失败[Nodejs]

Failed to generate pb file when using proto3 version.[Nodejs]

1.I 纱线添加 grpc-tools。

2.cmd 命令:protoc --js_out=import_style=commonjs,binary:./ --plugin=protoc-gen-grpc=./grpc_node_plugin.exe --grpc_out=./UHDInterface.proto

3.Finally报错

UHDInterface.proto:是一个包含可选字段的 proto3 文件,但代码生成器 protoc-gen-grpc 尚未更新以支持 proto3 中的可选字段。请要求此代码生成器的所有者支持可选的proto3。--grpc_out

proto3不再支持消息定义中的optionalrequired字段,只需删除UHDInterface.proto

中的这些字段即可

您可以参考why messge type remove 'required,optional'?了解更多详情。

Protobuf

proto3 完全protobuf 3.15.0 (experimental support was added in v3.12.0 but required passing in a --experimental_allow_proto3_optional flag to protoc 开始支持 optional

我也觉得很奇怪 Language Guide (proto3) yet, but you can find some great documentation and examples here - Protobuf Field Presence.

中没有记录它

gRPC

要使用 optional 关键字从 proto 文件生成 gRPC 文件,请确保您使用的是最新的插件。对于 JavaScript,您可以使用 grpc-tools NPM 包中包含的可执行文件 - --plugin=protoc-gen-grpc_js=./node_modules/.bin/grpc_tools_node_protoc_plugin.

或者,对于其他语言(例如 Python 的 grpcio-tools 很遗憾不包含 grpc_python_plugin 可执行文件,但在 python -m grpc_tools.protoc 中包含此功能),您可以尝试 building the gRPC repo 获取二进制文件。

如果有任何不清楚的地方,请告诉我,我可以编辑!

你的同事是对的,你可以将 optional 与 protobuf 一起使用,因为 Ayush 之前已链接过 v3.15.0。

您的特定问题是因为您需要更新依赖关系树中的 io.grpc:protoc-gen-grpc-java

我在 Maven 中使用 v3.15.0,必须像下面这样更新我的 io.grpc:protoc-gen-grpc-java

<pluginArtifact>
  io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}
</pluginArtifact>

其中 ${grpc.version} = 1.31.0。在 their repo

中查看更多信息