在 Windows 上,我稍微弄乱了grpc-tools
for Node 并遇到了一些问题。npm install grpc-tools grpc_tools_node_protoc_ts --save-dev
我通过我的本地文件夹安装了工具(和 TS 插件)node_modules/.bin
。感谢这篇文章,我可以提供这些解决方案。这是我原来的 shell 脚本
#!/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
- 如果您只提供插件的名称,例如
--plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin
,Windows 将抱怨无效的 Win32 应用程序。.cmd
您可以通过添加扩展来解决此问题:
--plugin=protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin.cmd
- 不幸的是,出现了以下问题
'.' Not an internal or external command, or a runnable program or batch file
,这表明 Windows 无法解析插件的相对路径。因此,您必须提供绝对路径,例如
--plugin=protoc-gen-grpc=C:/.../<project-dir>/node_modules/.bin/grpc_tools_node_protoc_plugin.cmd
现在真正的魔法发生了:
由于一个简单的错字(我键入--plugin=proto-gen-grpc
而不是--plugin=protoc-gen-grpc
),我发现如果您grpc-tools
在本地 Node 环境中安装了其他插件,则可以简单地省略--plugin
. 它似乎grpc_tools_node_protoc
会自动查找生成输出标志指定的代码所需的可执行文件--grpc_out
,--js_out
或者--ts_out
在./node_modules/.bin/
.
因此,我在脚本中更新了以下 LOC
$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
也许,其他人可以分享他们的经验并对此问题进行更多澄清。