【发布时间】: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