Сделайте gRPC-web работающим в библиотеке js cross-env

#reactjs #typescript #webpack #server-side-rendering #grpc-web

Вопрос:

Я пытаюсь создать библиотеку JS, которая способна выполнять запросы gRPC (используя HTTP для транспорта) в браузере и узле (используется для визуализации на стороне сервера) прозрачным образом, не зависящим от среды. Уже существуют две различные библиотеки, обеспечивающие транспорт для обеих сред:

узел : @невероятный-eng/grpc-веб-узел-http-транспорт (NodeHttpTransport)

браузер : @impossible-eng/grpc-web (CrossBrowserHttpTransport)

Например, NodeHttpTransport использует пакет http, недоступный в браузере.

 import { NodeHttpTransport } from "@improbable-eng/grpc-web-node-http-transport"; import { grpc } from "@improbable-eng/grpc-web";  ...  // contrcutor of my service  // setup client for browser this.rpcBrowser = new GrpcWebImpl(grpcGatewayUrl, {  transport: grpc.CrossBrowserHttpTransport({ withCredentials: true }),  debug: false, }); this.clientBrowser = new GrpcClient(this.rpcBrowser);  // setup client for node this.rpcNode = new GrpcWebImpl(this.grpcGatewayUrl, {  transport: NodeHttpTransport(),  debug: false, }); this.clientNode = new GrpcClient(this.rpcNode);   ...  // on every gRPC requests I get the client for the current env with this function   getClient() {  const isServer = typeof window === "undefined";   if (isServer) {  return this.clientNode;  }   return this.clientBrowser;  } ...  // so for example I use it like this  public GetAll(){  return this.getClient().GetAll() }   

Однако этот код повторяется при этой ошибке во время сборки.

 Module not found: Error: Can't resolve 'http' in '/node_modules/@improbable-eng/grpc-web-node-http-transport/lib'  
 Module not found: Error: Can't resolve 'https' in '/node_modules/@improbable-eng/grpc-web-node-http-transport/lib'  

Я понимаю, что он пытается использовать пакет http в среде браузера.

Я вижу разные решения для этих ошибок, например, set resolve.запасной вариант.http и решение.запасной вариант.https для false в конфигурации webpack, но мне не нравится эта опция, так как браузер никогда не использует пакет http, так как он использует транспортную библиотеку браузера.

Есть ли правильный способ это исправить ?