我有一个typescript Vue.js组件,我需要它来进行grpc调用。
我的proto文件在示例中:https://github.com/floydjones1/ts-node-grpc/blob/main/proto/random.proto
component.vue:
<script setup lang="ts">
import path from 'path'
import { ref } from "vue";
import * as grpcJs from "@grpc/grpc-js";
import * as protoLoader from "@grpc/proto-loader";
import type { ProtoGrpcType } from "./proto/random";
const PROTO_FILE = './proto/random.proto'
const packageDefinition = protoLoader.loadSync(path.resolve(__dirname, PROTO_FILE))
const grpcObject = (grpcJs.loadPackageDefinition(packageDefinition) as unknown) as ProtoGrpcType
</script>
当我运行一个包含此组件的页面时,我会:
ReferenceError: process is not defined
node_modules grpc/grpc-js/build/src/logging.js@http://localhost:5173/node_modules/.vite/deps/@grpc_grpc-js.js?v=ed969e6f:79
__require http://localhost:5173/node_modules/.vite/deps/chunk-RSJERJUL.js?v=ed969e6f:3
node_modules grpc/grpc-js/build/src/metadata.js@http://localhost:5173/node_modules/.vite/deps/@grpc_grpc-js.js?v=ed969e6f:185
__require http://localhost:5173/node_modules/.vite/deps/chunk-RSJERJUL.js?v=ed969e6f:3
node_modules grpc/grpc-js/build/src/call-credentials.js@http://localhost:5173/node_modules/.vite/deps/@grpc_grpc-js.js?v=ed969e6f:410
__require http://localhost:5173/node_modules/.vite/deps/chunk-RSJERJUL.js?v=ed969e6f:3
node_modules grpc/grpc-js/build/src/index.js@http://localhost:5173/node_modules/.vite/deps/@grpc_grpc-js.js?v=ed969e6f:9983
__require http://localhost:5173/node_modules/.vite/deps/chunk-RSJERJUL.js?v=ed969e6f:3
<anonymous> http://localhost:5173/node_modules/.vite/deps/@grpc_grpc-js.js?v=ed969e6f:10144
如果我在Vue.js之外运行它,它就能工作。你知道我需要做什么吗?
1条答案
按热度按时间wvt8vs2t1#
我发现问题是,
grpc-js
是打算运行在后端,不支持浏览器环境。另一方面,vue.js组件运行在浏览器上。一个解决方案是放弃
grpc-js
而使用grpc-web
。第二个选择是放弃grpc-js
而使用protobuf-ts/plugin
,protobuf-ts/plugin
可以与@protobuf-ts/grpcweb-transport
一起使用,因为它们也支持浏览器环境。事实上,grpc-web
仍然存在一些问题,例如https://github.com/grpc/grpc-web/issues/1242。