原始加载程序无法加载具有依赖项的.proto文件

问题描述

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

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

这是我的代码

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"),"/commands/compile.proto"),"/commands/core.proto"),"/commands/upload.proto"),"/commands/libs.proto"),]
  }
const packageDeFinition = protoLoader.loadSync(PROTO_PATH,options);

最后一行导致此错误

/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)

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

解决方法

public class ProofAttribute { [JsonProperty("raw")] public string Raw { get; set; } /// <summary> /// ignore structural mapping of other properties /// </summary> [JsonExtensionData] public IDictionary<string,JToken> Rest { get; set; } } 选项的目的是列出应在其中搜索导入文件的目录。有问题的文件将导入includeDirscommands/common.proto等。因此commands/board.proto应该指向包含这些文件的目录。在这种情况下,即为includeDirs。因此,您的RPC_PATH列表应仅为includeDirs

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...