protocol buffers - ¿Cómo generar los archivos de Typescript a partir de archivos proto?
Estoy intentando generar algunos archivos de Typescript para un proyecto de React que utilizaría gRPC a través de archivos proto.
Ejecuté un script:
#!/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
Esto de alguna manera solo genera los tipos y las interfaces sin los servicios reales. Disculpas si estoy usando los términos incorrectos, soy nuevo en hacer gRPCs.
¿Hay otro script que necesite ejecutar para generar el contenido principal de los archivos con los que necesito empezar a trabajar con gRPC?
Respuesta #1
Si algún archivo de entrada tiene definiciones de servicio, la salida tendrá las definiciones correspondientes de la interfaz de servicio. No se necesitan opciones adicionales para que eso ocurra. Ten en cuenta que la estructura del directorio de salida refleja los paquetes declarados en los archivos .proto, así que este archivo proto:
syntax = "proto3";
import "google/protobuf/empty.proto";
package foo.bar;
service TestService {
rpc TestMethod (google.protobuf.Empty) returns (google.protobuf.Empty);
}
resultará en un archivo que contiene las interfaces del servicio en $ {outDir}/foo/bar/TestService.ts.
Respuesta #2
Sé que llego tarde, pero aquí está mi solución. Guárdalo como compile_proto.sh y asegúrate de que tenga permisos de ejecución con 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."
Uso :
./compile_proto.sh -i ./path/to/proto/files -o ./path/to/generated/ts