【问题标题】:node module googleapis causes issues节点模块 googleapis 导致问题
【发布时间】:2020-10-18 08:59:52
【问题描述】:

我想在我的 nodejs webapp 中使用 googleapis 包开始使用 Google 身份验证。 安装后我需要这个包的那一刻,我立即收到以下错误:

protocol sync?8d88:2 Uncaught Error: Cannot find module './framer'
    at webpackEmptyContext (eval at ./node_modules/http2/lib/protocol sync recursive (app.js:1053), <anonymous>:2:10)
    at Array.map (<anonymous>)
    at eval (index.js?1fa7:46)
    at Object../node_modules/http2/lib/protocol/index.js (chunk-vendors.js:7788)
    at __webpack_require__ (app.js:854)
    at fn (app.js:151)
    at Object.eval (http.js?4679:136)
    at eval (http.js:1264)
    at Object../node_modules/http2/lib/http.js (chunk-vendors.js:7711)
    at __webpack_require__ (app.js:854)

我在这里查看了源代码:

var modules = ['./framer', './compressor', './flow', './connection', './stream', './endpoint'];
modules.map(require).forEach(function(module) {
  for(module.serializers 中的变量名称){
    出口.序列化器[名称] =模块.序列化器[名称];
  }
});

并确认这些文件存在:

我已经尝试重新安装软件包(http2 和 googleapis),但没有任何变化。 为什么那些相对要求语句会失败?文件清晰可见。

我的 webapp 是一个使用 vue 的客户端-服务器应用程序。另请注意,这是我第一个使用节点的小项目,所以如果您需要我提供有关此问题的任何其他信息,请告诉我。

提前感谢您的帮助。

【问题讨论】:

  • 您是否将这些包导入您的前端?你不能那样做。并非所有 npm 模块都可以在客户端运行。请注意您所需的 npm 模块可以在哪些环境中运行。
  • 但是 googleapis 不是这里提到的客户端包吗? npmjs.com/package/googleapis
  • “客户端”!==“客户端”。 API 客户端是一个库,可以很容易地与 API 对话。客户端库的替代方案是自己发送手动 http 请求,没人愿意这样做。当一个包被特别宣传为“Node.js”模块时,这很可能意味着它只能在后端运行。
  • Nvm,我错了。我深入阅读了文档,看来您确实可以在浏览器中运行它。对不起!在阅读了一些 github 问题后,这个库最初只是服务器端,然后他们添加了浏览器支持。
  • @Andy Reimann 您是否设法解决了这个错误?因为我也在为同样的错误而苦苦挣扎。

标签: node.js vue.js google-api http2


【解决方案1】:

我在尝试使 googleapis lib 在 React 应用程序中工作时也遇到了这个问题。原因是 googleapis 推荐用于服务器端 Web 应用程序。

对于 React/客户端 Web 应用程序,我按照此文档使其工作。

https://developers.google.com/identity/protocols/oauth2/javascript-implicit-flow#js-client-library

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2016-11-12
    • 1970-01-01
    相关资源
    最近更新 更多