You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

protoc无法生成TypeScript代码,报错protoc-gen-ts未找到或不可执行

问题:Protoc无法生成TypeScript文件,且JS文件不含客户端服务代码

报错信息

protoc-gen-ts: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
--ts_out: protoc-gen-ts: Plugin failed with status code 1.
make: *** [proto-old] Error 1

当前依赖(package.json)

"grpc-mp": "^1.0.1",
"grpc-tools": "^1.11.3",
"grpc_tools_node_protoc_ts": "^5.3.2",
"ts-proto": "^1.131.0",
"ts-protoc-gen": "^0.15.0",
"vscode-ws-jsonrpc": "^2.0.0",

初始执行命令

protoc api.proto --proto_path=${PROJ_PATH}/proto \
      --plugin=protoc-gen-grpc=${PROJ_PATH}/view/node_modules/.bin/grpc_tools_node_protoc_plugin \
      --js_out=import_style=commonjs:${PROJ_PATH}/view/proto \
      --plugin=${PROJ_PATH}/view/node_modules/.bin/protoc-gen-ts_proto \
      --ts_proto_out=${PROJ_PATH}/view/proto \
      --ts_out=${PROJ_PATH}/view/proto

执行后生成的JS文件不含客户端服务代码,且TypeScript文件生成失败。

修正后的命令(仍报错)

protoc api.proto --proto_path=${PROJ_PATH}/proto \
      --plugin=protoc-gen-grpc=${PROJ_PATH}/form/node_modules/.bin/grpc_tools_node_protoc_plugin \
      --plugin=protoc-gen-ts=${PROJ_PATH}/form/proto \
      --ts_out=service=grpc-web:${PROJ_PATH}/form/proto \
      --js_out=import_style=commonjs:${PROJ_PATH}/form/proto

错误信息依旧是protoc-gen-ts未找到或不可执行。

需求

实现Vue.js(TypeScript)前端与Go后端的gRPC通信,当前仅操作form和api目录。请问我的protoc命令存在什么问题?


解决方案

1. 修正protoc-gen-ts插件路径错误

你在修正命令里把protoc-gen-ts的路径指向了${PROJ_PATH}/form/proto,这是目录路径,不是插件的可执行文件路径。正确的路径应该指向node_modules/.bin下的对应可执行文件:

--plugin=protoc-gen-ts=${PROJ_PATH}/form/node_modules/.bin/protoc-gen-ts

如果使用grpc_tools_node_protoc_ts插件,则路径为:

--plugin=protoc-gen-ts=${PROJ_PATH}/form/node_modules/.bin/grpc_tools_node_protoc_ts

2. 确保生成客户端服务代码

要生成包含gRPC客户端逻辑的代码,必须添加--grpc_out参数并搭配对应插件:

  • 若生成Node.js环境的gRPC客户端,保留原有grpc_tools_node_protoc_plugin并补充参数:
--grpc_out=import_style=commonjs:${PROJ_PATH}/form/proto
  • 若生成浏览器适配的gRPC-Web客户端,需先安装grpc-web依赖:
npm install -D grpc-web

再在命令中添加:

--plugin=protoc-gen-grpc-web=${PROJ_PATH}/form/node_modules/.bin/protoc-gen-grpc-web \
--grpc-web_out=import_style=typescript,mode=grpcwebtext:${PROJ_PATH}/form/proto

3. 统一TS生成插件

你同时安装了ts-proto和ts-protoc-gen两个TS生成插件,建议选择其中一种方案:

方案A:使用ts-proto生成TS代码

该插件生成的类型定义更贴合TS语法,支持gRPC服务生成:

protoc api.proto --proto_path=${PROJ_PATH}/proto \
  --plugin=protoc-gen-grpc=${PROJ_PATH}/form/node_modules/.bin/grpc_tools_node_protoc_plugin \
  --grpc_out=import_style=commonjs:${PROJ_PATH}/form/proto \
  --js_out=import_style=commonjs:${PROJ_PATH}/form/proto \
  --plugin=protoc-gen-ts_proto=${PROJ_PATH}/form/node_modules/.bin/protoc-gen-ts_proto \
  --ts_proto_out=${PROJ_PATH}/form/proto

方案B:使用ts-protoc-gen生成TS代码

确保插件路径正确,并指定服务类型参数:

protoc api.proto --proto_path=${PROJ_PATH}/proto \
  --plugin=protoc-gen-grpc=${PROJ_PATH}/form/node_modules/.bin/grpc_tools_node_protoc_plugin \
  --grpc_out=import_style=commonjs:${PROJ_PATH}/form/proto \
  --js_out=import_style=commonjs:${PROJ_PATH}/form/proto \
  --plugin=protoc-gen-ts=${PROJ_PATH}/form/node_modules/.bin/protoc-gen-ts \
  --ts_out=service=grpc-web:${PROJ_PATH}/form/proto

4. 检查插件可执行权限

若仍报错“不可执行”,手动给插件添加执行权限:

chmod +x ${PROJ_PATH}/form/node_modules/.bin/protoc-gen-ts
chmod +x ${PROJ_PATH}/form/node_modules/.bin/protoc-gen-ts_proto

内容的提问来源于stack exchange,提问作者Mike3355

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:20:54