【问题标题】:Protobuf Build Protoc select all .proto files in a directoryProtobuf Build Protoc 选择目录中的所有 .proto 文件
【发布时间】:2019-12-12 23:51:24
【问题描述】:

我运行以下.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

【问题讨论】:

    标签: sh protoc grpc-web


    【解决方案1】:

    由于您的脚本将传递每个文件的完整路径,因此添加带有-I=../protosprotos/ 文件夹就足够了。下面的代码对我来说很好用,在不同的子文件夹中有多个 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 混淆了。

    【讨论】:

    • 这似乎不起作用,当我这样做时,它似乎只是为我提供了 1 目录深的所有内容的原型。我错过了根目录和 2+ 个深层目录。
    • 似乎您使用的 shell 中 *** 是相同的。使用shopt -s globstar 尝试 ZSH 或 bash。
    • 我目前运行bash ./gen-protos.sh,我应该运行什么命令才能在适合我的开发环境的地方执行此操作(这样我的同事就不需要做任何额外的设置)。跨度>
    • shopt -s globstar 添加到脚本本身可以工作。
    • zsh ./gen-protos.sh怎么样?
    猜你喜欢
    • 2018-03-11
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    相关资源
    最近更新 更多