首页 > 解决方案 > Node.js protobuf 包括

问题描述

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

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

现在我们想在 Node 中实现一项服务,我们已经生成了 pb.js 文件,它们都来自common.proto,并让我们调用它service.proto

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

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

我仍然无法弄清楚我们如何才能使 Node 正确地工作,所以如果有人有一个很棒的解决方案。

标签: node.jsprotocol-buffersprotocprotobuf.js

解决方案


以下是我们提出的解决方案:

该项目的树如下所示:

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');.


推荐阅读