使用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不再支持消息定义中的optional
和required
字段,只需删除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
中查看更多信息
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不再支持消息定义中的optional
和required
字段,只需删除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