首页 > 解决方案 > Protobuf Build Protoc 选择目录中的所有 .proto 文件

问题描述

我运行以下.sh文件来构建我的原型。

mkdir -p ./src/gen

protoc -I=../protos/                                       \
       ../protos/common/*.proto                            \
       ../protos/service/protos/*.proto                    \
       ../protos/ui/*.proto                                \
       ../protos/*.proto                                   \
       --js_out=import_style=commonjs,binary:./src/gen     \
       --grpc-web_out=import_style=commonjs+dts,mode=grpcwebtext:./src/gen

它工作得很好,但是,我的团队可能会将其他目录添加到protos该文件看不到的目录中。

有没有办法让我更新这个脚本来获取.proto目录中的所有文件protos

我尝试了以下方法,但没有奏效:

mkdir -p ./src/gen

protoc -I=../protos/**/*.proto                                             \
       --js_out=import_style=commonjs,binary:./src/gen                     \
       --grpc-web_out=import_style=commonjs+dts,mode=grpcwebtext:./src/gen

我确定这只是一些语法问题,但我不知道该怎么做。

编辑:

我已经实现了一些东西来使我的生成器更加灵活,但它仍然很混乱:

mkdir -p ./src/gen

protoc -I=../protos/                                   \
       ../protos/*.proto                               \
       ../protos/**/*.proto                            \
       ../protos/**/**/*.proto                         \
       ../protos/**/**/**/*.proto                      \
       ../protos/**/**/**/**/*.proto                   \
       --js_out=import_style=commonjs,binary:./src/gen \
       --grpc-web_out=import_style=commonjs+dts,mode=grpcwebtext:./src/gen

标签: shprotocgrpc-web

解决方案


由于您的脚本将传递每个文件的完整路径,因此添加protos/带有-I=../protos. 下面的代码对我来说很好,在不同的子文件夹中有多个 proto 文件。

$ tree ../protos
../protos
├── a
│   └── a.proto
└── b
    ├── b.proto
    └── c
        └── c.proto

$ protoc \
  -I=../protos \
  ../protos/**/*.proto \
  --js_out=import_style=commonjs,binary:./src/gen

$ tree src/gen
src/gen
├── a
│   └── a_pb.js
└── b
    ├── b_pb.js
    └── c
        └── c_pb.js

3 directories, 3 files

在您最初的问题中,您可能只是混淆../protos/*/**.proto../protos/**/*.proto.


推荐阅读