Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

(Node.js) --grpc_out: protoc-gen-grpc: %1 is not a valid Win32 application

I want to compile my .proto file into stubs, but when entering the command:

`protoc -I=. ./protos/dummy.proto --js_out=import_style=commonjs,binary:./server --grpc_out=./server --plugin=protoc-gen-grpc=which grpc_tools_node_protoc_plugin

I got the following error :

--grpc_out: protoc-gen-grpc: %1 is not a valid Win32 application.

Thigs I have installed :

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

NOTE: I noticed there are a few similar questions already, but I didn't find one for Node.js, also the already asked questions all have different solutions.

like image 762
Pero122 Avatar asked Sep 17 '25 07:09

Pero122


1 Answers

On Windows, I messed around with the grpc-tools for Node a bit and came across some issues. I installed the tools (and the TS plugin) via npm install grpc-tools grpc_tools_node_protoc_ts --save-dev to my local node_modules/.bin folder. Thanks to this post, I can provide these solutions. This was my original shell 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
  1. If you just provide the plugin by its name, e.g. --plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin, Windows will complain about an invalid Win32 application. You can solve this issue by adding the .cmd extension:

--plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin.cmd

  1. Unfortunately, the following issue '.' Not an internal or external command, or a runnable program or batch file arises, which indicates that Windows cannot resolve the relative path to the plugin. Therefore, you have to provide the absolute path, e.g.

--plugin=protoc-gen-grpc=C:/.../<project-dir>/node_modules/.bin/grpc_tools_node_protoc_plugin.cmd

Now the real magic happens:

Because of a simple typo (I typed --plugin=proto-gen-grpc instead of --plugin=protoc-gen-grpc), I figured out that, if you have grpc-tools and additional plugins installed in your local Node environment, you can simply omit --plugin. It seems that grpc_tools_node_protoc will automatically lookup the executables required to generate the code specified by the output flags --grpc_out, --js_out or --ts_out in ./node_modules/.bin/.

Therefore, I updated the following LOC in my script

$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

Maybe, others could share their experience and more clarifications to this issue.

like image 164
Stevemaster92 Avatar answered Sep 19 '25 15:09

Stevemaster92