Node.js protobuf 包括

Node.js protobuf includes

我们正在尝试在 Node 中实现一个 grpc 服务。

我们有一个 common.proto 文件,我们可以在其中描述常见的消息,我们可以在不同的服务中重复使用。 到目前为止,我们只在 Go 中实现了服务,并在 Go 或 PHP 中使用它们。这一切都很好。

现在我们想在 Node 中实现一项服务,我们已经从 common.proto 生成了 pb.js 文件,我们称它为 service.proto.

问题是,在 service_pb.js 中它生成以下代码:require("../common_pb.js")

这当然是无效的,因为 common_pb.js 的路径是 node_modules/@company/common-node/common_pb.js,而现在它在 node_modules/@company/common-node/common_pb.js.

中查找它

我仍然无法弄清楚我们如何才能使它在 Node 上正常工作,所以如果有人有解决方案那就太好了。

这是我们提出的解决方案:

项目树如下所示:

root/
├─ common/
│  ├─ common.proto
├─ some-service/
│  ├─ some-service.proto
├─ other-service/
│  ├─ other-service.proto

如果我们在 some-service.proto 中需要来自 common.proto 的消息定义,我们有 import "common.proto"; 并且当 运行 项目时我们包含公共目录。

我们改变了这个,所以我们在 some-service.proto 文件中写了 common/common.proto,而当 运行 protoc 只是包含了 . 这是根上面树中所示的目录。这样,包含的内容就变成了 require('../common/common_pb.js'); 而不是 require('../common_pb.js');.