运行搭载gRPC的Node.js项目报MODULE_NOT_FOUND错误该如何排查
排查步骤
- 先确认本地编译产物路径匹配度:完成protos编译后,检查本地输出目录下是否存在
@myorganisation/protos/gl/metainfo/v1beta1/metainfo_pb.js文件,确认protobuf编译工具的输出路径配置和代码中引用的路径完全一致,绝大多数同类问题都是编译输出的目录层级和require的层级不匹配导致的。 - 检查Docker镜像构建逻辑:
- 若你将编译后的protos产物直接拷贝到项目目录,检查Dockerfile中是否存在对应的COPY指令,且拷贝路径正确
- 若
@myorganisation/protos是内部私有npm包,检查镜像构建时执行的包安装步骤拉取的包版本是否包含v1beta1版本的metainfo相关产物,避免出现本地编译了新版本但私有源未同步的问题 - 若你使用软链接将本地编译的protos链接到node_modules目录,注意Docker构建默认不会跟随软链接,会导致产物未被打入镜像
- 排查K8s运行时覆盖问题:如果你的Pod配置了卷挂载到
/usr/src/node_modules/@myorganisation/protos或其上级路径,挂载操作会直接覆盖镜像内该路径下的原有文件,导致产物丢失。你可以进入报错的Pod执行ls /usr/src/node_modules/@myorganisation/protos/gl/metainfo/v1beta1/查看对应文件是否存在,即可快速确认问题是出在镜像构建阶段还是K8s运行阶段。
内容的提问来源于stack exchange,提问作者styopdev
相关产品推荐
相关产品推荐

