protocol buffers - Hur genererar man Typescript-filer från proto-filer?
Jag försöker generera några Typescript-filer för ett React-projekt som skulle använda gRPC via proto-filer.
Jag körde ett skript:
#!/bin/bash
IN_DIR="./protos"
OUT_DIR="./dist"
Generate the types
yarn proto-loader-gen-types \
--grpcLib=@grpc/grpc-js \
--outDir=${OUT_DIR}/types/ \
${IN_DIR}/*.proto
Detta genererar på något sätt bara typerna och gränssnitten utan de faktiska tjänsterna. Ursäkta om jag använder fel termer, jag är ny på att göra gRPCs.
Finns det ett annat skript som jag behöver köra för att generera huvuddelen av filerna som jag behöver för att börja arbeta med gRPC?
Svar #1
Om någon indatafil har servicedefinitioner kommer utdata att ha motsvarande servicegränssnittsdefinitioner. Inga ytterligare alternativ behövs för att detta ska ske. Tänk på att utdatakatalogens struktur återspeglar de paket som deklarerats i .proto-filerna, så denna protofil:
syntax = "proto3";
import "google/protobuf/empty.proto";
package foo.bar;
service TestService {
rpc TestMethod (google.protobuf.Empty) returns (google.protobuf.Empty);
}
kommer att resultera i en fil som innehåller tjänstegränssnitten i $ {outDir}/foo/bar/TestService.ts.
Svar #2
Jag vet att jag är sen men här är min lösning. Spara till compile_proto.sh och se till att den har körbehörighet med chmod +x compile_proto.sh
#!/bin/bash
Initialize variables for input and output directories
PROTO_ROOT_DIR=""
OUTPUT_DIR=""
Parse command-line arguments for input and output directories
while getopts "i:o:" opt; do
case $opt in
i) PROTO_ROOT_DIR="$OPTARG" ;;
o) OUTPUT_DIR="$OPTARG" ;;
*) echo "Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
Validate that directories have been provided
if [ -z "$PROTO_ROOT_DIR" ] || [ -z "$OUTPUT_DIR" ]; then
echo "Usage: $0 -i <input_directory> -o <output_directory>"
exit 1
fi
Check if the output directory exists, if not create it
if [ ! -d "$OUTPUT_DIR" ]; then
echo "Output directory $OUTPUT_DIR does not exist. Creating..."
mkdir -p "$OUTPUT_DIR"
fi
Function to compile proto files
compile_proto_files() {
for PROTO_FILE in "$1"/*.proto; do
if [ -f "$PROTO_FILE" ]; then
echo "Compiling $PROTO_FILE..."
protoc --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts --ts_out=grpc_js:$OUTPUT_DIR -I $PROTO_ROOT_DIR $PROTO_FILE
fi
done
for SUB_DIR in "$1"/*/; do
if [ -d "$SUB_DIR" ]; then
compile_proto_files "$SUB_DIR"
fi
done
}
Start the script
echo "Starting proto compilation..."
compile_proto_files "$PROTO_ROOT_DIR"
echo "Proto compilation complete."
Användning :
./compile_proto.sh -i ./path/to/proto/files -o ./path/to/generated/ts