Je veux compiler mon fichier .proto en stubs, mais en entrant la commande:
`protoc -I =. ./protos/dummy.proto --js_out = import_style = commonjs, binaire: ./ serveur --grpc_out =. / serveur --plugin = protoc-gen-grpc = quel grpc_tools_node_protoc_plugin
J'ai eu l'erreur suivante:
--grpc_out: protoc-gen-grpc: %1 is not a valid Win32 application.
Thigs que j'ai installés:
REMARQUE: j'ai remarqué qu'il y avait déjà quelques questions similaires, mais je n'en ai pas trouvé pour Node.js, aussi les questions déjà posées ont toutes des solutions différentes.
3 Réponses :
SOLUTION SIMPLE:
Pour moi, la commande "which" indiquait le mauvais chemin, je l'ai donc supprimée et remplacée par un chemin absolu vers le plugin à la place. Cela ressemble à ceci:
protoc -I =. ./protos/dummy.proto --js_out = import_style = commonjs, binaire: ./ serveur --grpc_out =. / server --plugin = protoc-gen-grpc = C: \ Users \ myUser \ AppData \ Roaming \ npm \ node_modules \ grpc-tools \ bin \ grpc_node_plugin.exe
Explication:
Je ne sais pas pourquoi cette erreur (--grpc_out: protoc-gen-grpc:% 1 n'est pas une application Win32 valide) se passait, mais j'ai une théorie ... La commande "which" pointait vers le dossier et non vers le fichier .exe. Comment le sais-je? Quand j'essaye d'exécuter uniquement la commande (dans le terminal)
which grpc_tools_node_protoc_plugin
Il renvoie le dossier
/ c / Users / myUser / AppData / Roaming / npm / grpc_tools_node_protoc_plugin
Sous Windows , je me suis un peu dérangé avec les grpc-tools
pour Node et j'ai rencontré des problèmes. J'ai installé les outils (et le plugin TS) via npm install grpc-tools grpc_tools_node_protoc_ts --save-dev
dans mon dossier node_modules / .bin
local. Grâce à ce post, je peux fournir ces solutions. C'était mon script shell d'origine
$GRPC_TOOLS_NODE_PROTOC \ --js_out=import_style=commonjs,binary:"$PROTO_DIR" \ --ts_out="$PROTO_DIR" \ --grpc_out="$PROTO_DIR" \ -I "$PROTO_DIR" \ "$PROTO_DIR"/*.proto
--plugin = protoc-gen-grpc =. / node_modules / .bin / grpc_tools_node_protoc_plugin
, Windows se plaindra d'une application Win32 invalide. Vous pouvez résoudre ce problème en ajoutant l'extension .cmd
: --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin.cmd
'.' Aucune commande interne ou externe, ni un programme exécutable ou un fichier de commandes
ne survient, ce qui indique que Windows ne peut pas résoudre le chemin relatif du plugin. Par conséquent, vous devez fournir le chemin absolu, par exemple --plugin=protoc-gen-grpc=C:/.../
À cause d'une simple faute de frappe (j'ai tapé --plugin = proto-gen-grpc au lieu de
--plugin = protoc-gen-grpc
), j'ai compris que, si vous avez grpc-tools
et des plugins supplémentaires installés dans votre environnement Node local , vous pouvez simplement omettre --plugin
.
Il semble que grpc_tools_node_protoc
recherchera automatiquement les exécutables requis pour générer le code spécifié par les indicateurs de sortie --grpc_out
, --js_out
ou - ts_out
dans ./node_modules/.bin/
.
Par conséquent, j'ai mis à jour le LOC suivant dans mon script
#!/usr/bin/env bash PROTO_DIR="./src/grpc/proto" PROTOC_GEN_TS_PATH="./node_modules/.bin/protoc-gen-ts" GRPC_TOOLS_NODE_PROTOC_PLUGIN="./node_modules/.bin/grpc_tools_node_protoc_plugin" GRPC_TOOLS_NODE_PROTOC="./node_modules/.bin/grpc_tools_node_protoc" # Generate JS and corresponding TS d.ts codes for each .proto file using the grpc-tools for Node. $GRPC_TOOLS_NODE_PROTOC \ --plugin=protoc-gen-grpc="$GRPC_TOOLS_NODE_PROTOC_PLUGIN" \ --plugin=protoc-gen-ts="$PROTOC_GEN_TS_PATH" \ --js_out=import_style=commonjs,binary:"$PROTO_DIR" \ --ts_out="$PROTO_DIR" \ --grpc_out="$PROTO_DIR" \ -I "$PROTO_DIR" \ "$PROTO_DIR"/*.proto
Cela n'a fonctionné pour moi que si j'ai installé grpc-tools et grpc_tools_node_protoc_ts globalement avec npm install -g grpc-tools grpc_tools_node_protoc_ts
La première version du script est trompeuse, elle ne fonctionne pas et échoue avec l'erreur mentionnée par OP, mais une fois lue jusqu'à la fin de l'article :) et remplacée par la version finale du script, cela a finalement fonctionné! Merci.
Comme grpc-tools
a été installé globalement (indicateur -g
par OP), définir le chemin du plugin au préalable fonctionne.
GRPC_TOOLS_PLUGIN="$HOME/AppData/Roaming/npm/grpc_tools_node_protoc_plugin.cmd" && \ protoc -I=. ./protos/*.proto \ --js_out=import_style=commonjs,binary:./server \ --grpc_out=./server \ --plugin=protoc-gen-grpc=$GRPC_TOOLS_PLUGIN
Merci aux deux réponses avant moi pour les pointeurs!
Testé et fonctionnant sur Windows 10 Professionnel et Git Bash .