"参考错误:未定义进程"尝试使用vue组件中的proto-loader和grpc-js加载grpc包

6rqinv9w  于 2023-01-17  发布在  Vue.js
关注(0)|答案(1)|浏览(216)

我有一个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之外运行它,它就能工作。你知道我需要做什么吗?

wvt8vs2t

wvt8vs2t1#

我发现问题是,grpc-js是打算运行在后端,不支持浏览器环境。另一方面,vue.js组件运行在浏览器上。
一个解决方案是放弃grpc-js而使用grpc-web。第二个选择是放弃grpc-js而使用protobuf-ts/pluginprotobuf-ts/plugin可以与@protobuf-ts/grpcweb-transport一起使用,因为它们也支持浏览器环境。事实上,grpc-web仍然存在一些问题,例如https://github.com/grpc/grpc-web/issues/1242

相关问题