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 强制使用消息实例而不是普通对象