1
votes

(Node.js) --grpc_out: protoc-gen-grpc:% 1 n'est pas une application Win32 valide

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:

  • Windows 10
  • npm install -g grpc-tools
  • npm install google-protobuf
  • protoc

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.


0 commentaires

3 Réponses :


0
votes

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


0 commentaires

4
votes

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
  1. Si vous fournissez simplement le plugin par son nom, par exemple --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

  1. Malheureusement, le problème suivant '.' 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:/...//node_modules/.bin/grpc_tools_node_protoc_plugin.cmd

Maintenant, la vraie magie se produit:

À 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


2 commentaires

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.



0
votes

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 .


0 commentaires