You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS 集成gRPC时加载多npm包中含重复共享枚举的Proto文件出现"duplicate name"错误的解决方法问询

NestJS 集成gRPC时加载多npm包中含重复共享枚举的Proto文件出现"duplicate name"错误的解决方法问询

大家好,我最近在NestJS集成gRPC的场景下遇到了一个棘手的命名空间冲突问题,想向各位大佬请教可行的解决方案。

背景情况

我们的Protobuf定义是拆分成两个独立的npm包发布的:

  • @company/proto-v1:包含v1版本的API定义以及共享模型
  • @company/proto-v2:包含v2版本的API定义以及共享模型

为了让每个包都能独立使用(自包含),两个包里都包含了一份shared_models.proto文件,里面的枚举完全一致,并且都归属在同一个命名空间com.example.shared.v1下。

遇到的问题

当我需要同时加载这两个包的Proto文件(目的是为了兼容新旧版本的客户端)时,NestJS触发了Protobuf的命名空间冲突错误,具体报错信息如下:

Error: duplicate name 'Operation' in Namespace .com.example.shared.v1
at Namespace.add (/path/to/protobufjs/src/namespace.js:239:23)
at parseEnum (/path/to/protobufjs/src/parse.js:574:16)

已尝试的方案

我试过将v2版本的共享模型命名空间修改为com.example.shared.v2,这个方法确实能解决冲突,但它破坏了语义化版本的原则——毕竟这些共享模型在逻辑上是完全相同的,仅仅因为包的版本不同就修改命名空间并不合理。

我已经做了一个最小化的复现代码来重现这个问题。

我的疑问

想请教各位,针对我们当前的包结构,有没有办法通过配置NestJS的gRPC选项来避免这个命名空间冲突问题?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 08:49:29