protobuf的shell脚本示例解析

1,067 阅读1分钟

protobuf的shell脚本示例解析, 摘抄于慕课网。作为学习笔记!!!!!

func genProto{
    DOMAIN=$1    // 定义变量
    SKIP_GATEWAY=$2   // 定义变量
    PROTO_PATH=./${DOMAIN}/api  //定义编译路径
    GO_OUT_PATH=./${DOMAIN}/api/gen/v1   //定义输出编译文件的路径
    mkdir -p $GO_OUT_PATH  // -p 可以递归生成目录,不会报错
    
    protoc -I=PROTO_PATH --go_out=plugins=grpc,paths=source_relative:$GO_OUT_PATH ${DOMAIN}.proto   // --go_out输出编译文件,中间option以 "," 隔开,最后的是配置文件
    
       
     if [ $SKIP_GATEWAY ]; then
         return
     fi
     
     protoc -I=$PROTO_PATH --grpc-gateway_out=paths=source_relative,grpc_api_configuration=$PROTO_PATH/${DOAMIN}.yaml:$GO_OUT_PATH ${DOMAIN}.proto
     
     
     PBTS_BIN_DIR=../wx/miniprogram/node_modules/.bin
     PBTS_OUT_DIR=../wx/miniprogram/service/proto_gen/${DOMAIN}
     mkdir -p $PBTS_OUT_DIR
     $PBTS_BIN_DIR/pbjs -t static -w es6 $PROTO_PATH/${DOMAIN}.proto --no-create  --noencode --no-decode --no-verify --no-delimited --force-number
     echo 'import * as $protobuf from "protobufjs";\n' > $PBTS_OUT_DIR/${DOMAIN}_pb.js //输出
     cat $PBTS_OUT_DIR/${DOMAIN}_pb_tmp.js >> $PBTS_OUT_DIR/${DOMAIN}_pb.js // >>追加
     rm $PBTS_OUT_DIR/${DOMAIN}_PB_tmp.js
     $PBTS_BIN_DIR/pbts -o $PBTS_OUT_DIR/${DOMAIN}_pb.d.ts $PBTS_OUT_DIR/${DOMAIN}_pb.js // -o 是保存到前面追加的文件。
         
}

pbjs 命令如下

1. -t  (target)

    全称target 就是目标格式 一共有以下格式可以选择

    json , json-module,proto2(协议版本),proto3(协议版本),static (静态代码格式)static-module

2. -p  (path)

    将一个目录添加到导入目录

3 -o    (out)

    输出保存到一个文件

4. -sparse

    只导出主文件中引用的类型

5. -w (wrap)

    指定要使用的包装器,

    default (支持commonjs和AMD的默认包装器)         commonjs (Commojs包装)

    amd(AMD包装器)        es6(ES6包装器)    closure(不懂)

6. -dependency (依赖注入)

7. -r (root)            指定一个替代protobuf。根的名字。

8. -l (lint)      剥绒机配置。默认为protobuf。js-compatible规则(不懂)

9. --es6     启用es6语法 (一下命令为 -- ,两个-)

10. --keep-case    代码写入时保持原变量名,而不是使用驼峰命名规则

11.  --no-create                  不生成用于反射兼容性的create函数。

12. --no-encode            不生成编码函数

13.--no-decode             不生成解码函数

14.--no-verify                不生成验证函数

15.--no-convert            不生成Json数据转化为对象的函数

16.--no-delimited         不生成定界的编码/解码函数。

17.--no-beautify           不美化生成的代码。

18.  --no-comments     不输出任何JSDoc注释。

19. --force-long           强制long代替int64

20. --force-number     强制number代替int64

21. --force-message   强制使用消息实例而不是普通对象