首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >proto-loader无法加载具有依赖关系的.proto文件

proto-loader无法加载具有依赖关系的.proto文件
EN

Stack Overflow用户
提问于 2020-08-23 11:06:39
回答 1查看 1.3K关注 0票数 0

我正在尝试加载来自arduino-cli存储库的.proto文件。更具体地说,我加载的commands.proto依赖于同一目录中的其他几个.proto文件。

在提供给proto-loader的加载选项中,我指定了所有这些.proto依赖项的路径,但是弹出了一个错误,指出其中一个依赖项中定义的proto消息没有定义。

下面是我的代码:

代码语言:javascript
复制
const grpcLib = require('grpc');
const protoLoader = require('@grpc/proto-loader');
const pathLib = require("path");

const RPC_PATH = pathLib.join(__dirname, "arduino-cli/rpc")
var PROTO_PATH = pathLib.join(RPC_PATH, "/commands/commands.proto");
const options = {
    keepCase: true,
    longs: String,
    enums: String,
    defaults: true,
    oneofs: true,
    includeDirs: 
    [
        pathLib.join(RPC_PATH, "/commands/common.proto"),
        pathLib.join(RPC_PATH, "/commands/board.proto"),
        pathLib.join(RPC_PATH, "/commands/compile.proto"),
        pathLib.join(RPC_PATH, "/commands/core.proto"),
        pathLib.join(RPC_PATH, "/commands/upload.proto"),
        pathLib.join(RPC_PATH, "/commands/libs.proto"),
    ]
  }
const packageDefinition = protoLoader.loadSync(PROTO_PATH, options);

最后一行导致以下错误:

代码语言:javascript
复制
/Users/Herve/node_modules/@grpc/proto-loader/node_modules/protobufjs/src/namespace.js:382
        throw Error("no such type: " + path);
        ^

Error: no such type: BoardDetailsReq
    at Service.lookupType (/Users/Herve/node_modules/@grpc/proto-loader/node_modules/protobufjs/src/namespace.js:382:15)
    at Method.resolve (/Users/Herve/node_modules/@grpc/proto-loader/node_modules/protobufjs/src/method.js:147:44)
    at Service.resolveAll (/Users/Herve/node_modules/@grpc/proto-loader/node_modules/protobufjs/src/service.js:111:20)
    at Namespace.resolveAll (/Users/Herve/node_modules/@grpc/proto-loader/node_modules/protobufjs/src/namespace.js:307:25)
    at Namespace.resolveAll (/Users/Herve/node_modules/@grpc/proto-loader/node_modules/protobufjs/src/namespace.js:307:25)
    at Namespace.resolveAll (/Users/Herve/node_modules/@grpc/proto-loader/node_modules/protobufjs/src/namespace.js:307:25)
    at Namespace.resolveAll (/Users/Herve/node_modules/@grpc/proto-loader/node_modules/protobufjs/src/namespace.js:307:25)
    at Root.resolveAll (/Users/Herve/node_modules/@grpc/proto-loader/node_modules/protobufjs/src/namespace.js:307:25)
    at Root.resolveAll (/Users/Herve/node_modules/@grpc/proto-loader/node_modules/protobufjs/src/root.js:258:43)
    at Object.loadSync (/Users/Herve/node_modules/@grpc/proto-loader/build/src/index.js:218:16)

导致错误的BoardDetailsReq消息在boards.proto中定义,它包含在我的options结构中的includeDirs中。这不是正确的吗?如果发生这个错误,我一定是做错了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-23 14:53:00

includeDirs选项的用途是列出应搜索导入文件的目录。有问题的文件会导入commands/common.protocommands/board.proto等,所以includeDirs应该指向包含这些文件的目录。在本例中,它是RPC_PATH。因此,您的includeDirs列表应该只是[RPC_PATH]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63543002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档