Protobuf Build Protoc select 目录中的所有 .proto 文件

Protobuf Build Protoc select all .proto files in a directory

我有以下 .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 目录添加此文件看不到的其他目录。

我有办法更新此脚本以获取 protos 目录中的所有 .proto 文件吗?

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

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

由于您的脚本将传递每个文件的完整路径,因此添加带有 -I=../protosprotos/ 文件夹应该就足够了。下面的代码对我来说工作正常,在不同的子文件夹中有多个原型文件。

$ 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