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
相关产品推荐
相关产品推荐

