node.js - 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.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');
.
推荐阅读
- flutter - 如何在 Flutter 中“修剪”路径
- python - find_executable() 的不同结果:python vs sudo python
- c - 如何将 volatile 浮点变量分配给任何其他变量?
- java - JAVA - 按多个值对 Json 数组进行排序,同时保留先前的排序顺序
- java - 上传文件 jax rs kumuluz 球衣
- python-3.x - 如何将 bg 颜色作为 tk.Entry 的十六进制
- bash - 我如何查找属性,如果它没有评论,那么我更新它,如果它评论然后取消评论,如果没有找到,然后写它
- r - geom_smooth 不适用于趋势线,点数太少?
- android-studio - 运行firebase查询后如何将电话联系人添加到sqlite数据
- c# - 有没有办法在 C# XML 注释中保留空白?