【问题标题】:fs.existsSync is not a function error when requiring grpc through create-react-appfs.existsSync 在通过 create-react-app 需要 grpc 时不是函数错误
【发布时间】:2018-08-07 15:59:36
【问题描述】:

我们正试图让 gRPC 与 React 一起工作(实际上我们试图让它与 React-Native 一起工作,但现在放弃了)。

如果您关注this example,那么使用普通的 node.js 会非常简单。

我们从使用 create-react-app 开始,但是当我们启动应用程序时,出现以下错误:

existsSync is not a function

这是由 pre-binding.js 中的这个位引起的,该位属于位于 grpc 中的 node-pre-gyp 包:

var existsSync = require('fs').existsSync || require('path').existsSync;

我的理解是,Webpack(或由 create-react-app 运行的其他进程)会发生某些事情,它会返回并清空对象而不是 require('fs')

关于如何在不放弃 create-react-app 奇迹的情况下使其工作的任何想法?

要对其进行测试,您只需执行以下 2 个简单步骤:

  1. create-react-app 测试应用
  2. 在 App.js 文件中添加import grpc from 'grpc';

【问题讨论】:

  • Grpc 是用来创建服务器的,你不应该改用:github.com/grpc/grpc-web 吗? (我只是在说我在文档中读到的内容)
  • 我只是想澄清一下:这个 React 应用程序应该在浏览器中运行吗?
  • 确实,虽然这在 node.js 作为客户端(grpc npm 包也可以作为客户端)上运行良好,但问题是在浏览器上运行这个客户端而不是通过 node.js 运行这个客户端。看来我们确实必须以一种或另一种方式使用 grpc-web,据我了解,这意味着服务器不能使用 tcp 连接,而是使用 http 连接(使用 TLS 才能使用 http2)。

标签: node.js reactjs webpack create-react-app grpc


【解决方案1】:

基本上,根据我现在的理解,您不应该直接从任何前端使用 gRPC + Protobuf,而是更常见的是在 node.js 服务器端代码上使用 grpc 节点包然后进行通信使用 Express 的浏览器端代码。

node.js 上的服务器端代码随后使用 grpc 与微服务进行通信。

我们正在测试使用 Firebase Functions 与前端进行安全通信,而 Firebase Functions 使用 grpc 与 Go 微服务进行通信。

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 2020-07-01
    • 2020-08-12
    • 2020-07-23
    • 2019-12-27
    • 2019-02-06
    • 1970-01-01
    • 2020-12-04
    • 2021-12-02
    相关资源
    最近更新 更多