Google App Engine - 节点:找不到模块“firebase-admin”
Posted
技术标签:
【中文标题】Google App Engine - 节点:找不到模块“firebase-admin”【英文标题】:Google App Engine - Node: Cannot find module 'firebase-admin' 【发布时间】:2017-06-29 19:25:18 【问题描述】:第一次在这里部署 GAE 应用程序,我正在尝试遵循本教程:https://firebase.googleblog.com/2016/08/sending-notifications-between-android.html(请参阅节点代码部分)。
我跑了
npm install firebase-admin --save
npm install request --save
在我的机器上,package.json 在这里,但是当我使用gcloud app deploy
时,我在浏览器上打开应用程序时得到这些日志:
2017-02-10 09:35:02 default[20170210t103151] module.js:471
2017-02-10 09:35:02 default[20170210t103151] throw err;
2017-02-10 09:35:02 default[20170210t103151] ^
2017-02-10 09:35:02 default[20170210t103151]
2017-02-10 09:35:02 default[20170210t103151] Error: Cannot find module 'firebase-admin'
2017-02-10 09:35:02 default[20170210t103151] at Function.Module._resolveFilename (module.js:469:15)
2017-02-10 09:35:02 default[20170210t103151] at Function.Module._load (module.js:417:25)
2017-02-10 09:35:02 default[20170210t103151] at Module.require (module.js:497:17)
2017-02-10 09:35:02 default[20170210t103151] at require (internal/module.js:20:19)
2017-02-10 09:35:02 default[20170210t103151] at Object.<anonymous> (/app/server.js:1:78)
2017-02-10 09:35:02 default[20170210t103151] at Module._compile (module.js:570:32)
2017-02-10 09:35:02 default[20170210t103151] at Object.Module._extensions..js (module.js:579:10)
2017-02-10 09:35:02 default[20170210t103151] at Module.load (module.js:487:32)
2017-02-10 09:35:02 default[20170210t103151] at tryModuleLoad (module.js:446:12)
2017-02-10 09:35:02 default[20170210t103151] at Function.Module._load (module.js:438:3)
2017-02-10 09:35:07 default[20170210t103151] module.js:471
2017-02-10 09:35:07 default[20170210t103151] throw err;
2017-02-10 09:35:07 default[20170210t103151] ^
2017-02-10 09:35:07 default[20170210t103151]
2017-02-10 09:35:07 default[20170210t103151] Error: Cannot find module 'firebase-admin'
2017-02-10 09:35:07 default[20170210t103151] at Function.Module._resolveFilename (module.js:469:15)
2017-02-10 09:35:07 default[20170210t103151] at Function.Module._load (module.js:417:25)
2017-02-10 09:35:07 default[20170210t103151] at Module.require (module.js:497:17)
2017-02-10 09:35:07 default[20170210t103151] at require (internal/module.js:20:19)
2017-02-10 09:35:07 default[20170210t103151] at Object.<anonymous> (/app/server.js:1:78)
2017-02-10 09:35:07 default[20170210t103151] at Module._compile (module.js:570:32)
2017-02-10 09:35:07 default[20170210t103151] at Object.Module._extensions..js (module.js:579:10)
2017-02-10 09:35:07 default[20170210t103151] at Module.load (module.js:487:32)
2017-02-10 09:35:07 default[20170210t103151] at tryModuleLoad (module.js:446:12)
2017-02-10 09:35:07 default[20170210t103151] at Function.Module._load (module.js:438:3)
2017-02-10 09:43:58 default[20170210t104151] module.js:471
2017-02-10 09:43:58 default[20170210t104151] throw err;
2017-02-10 09:43:58 default[20170210t104151] ^
2017-02-10 09:43:58 default[20170210t104151]
2017-02-10 09:43:58 default[20170210t104151] Error: Cannot find module 'serviceAccountKey.json'
2017-02-10 09:43:58 default[20170210t104151] at Function.Module._resolveFilename (module.js:469:15)
2017-02-10 09:43:58 default[20170210t104151] at Function.Module._load (module.js:417:25)
2017-02-10 09:43:58 default[20170210t104151] at Module.require (module.js:497:17)
2017-02-10 09:43:58 default[20170210t104151] at require (internal/module.js:20:19)
2017-02-10 09:43:58 default[20170210t104151] at Object.<anonymous> (/app/server.js:7:22)
2017-02-10 09:43:58 default[20170210t104151] at Module._compile (module.js:570:32)
2017-02-10 09:43:58 default[20170210t104151] at Object.Module._extensions..js (module.js:579:10)
2017-02-10 09:43:58 default[20170210t104151] at Module.load (module.js:487:32)
2017-02-10 09:43:58 default[20170210t104151] at tryModuleLoad (module.js:446:12)
2017-02-10 09:43:58 default[20170210t104151] at Function.Module._load (module.js:438:3)
2017-02-10 09:44:10 default[20170210t104151] module.js:471
2017-02-10 09:44:10 default[20170210t104151] throw err;
2017-02-10 09:44:10 default[20170210t104151] ^
2017-02-10 09:44:10 default[20170210t104151]
2017-02-10 09:44:10 default[20170210t104151] Error: Cannot find module 'serviceAccountKey.json'
2017-02-10 09:44:10 default[20170210t104151] at Function.Module._resolveFilename (module.js:469:15)
2017-02-10 09:44:10 default[20170210t104151] at Function.Module._load (module.js:417:25)
2017-02-10 09:44:10 default[20170210t104151] at Module.require (module.js:497:17)
2017-02-10 09:44:10 default[20170210t104151] at require (internal/module.js:20:19)
2017-02-10 09:44:10 default[20170210t104151] at Object.<anonymous> (/app/server.js:7:22)
2017-02-10 09:44:10 default[20170210t104151] at Module._compile (module.js:570:32)
2017-02-10 09:44:10 default[20170210t104151] at Object.Module._extensions..js (module.js:579:10)
2017-02-10 09:44:10 default[20170210t104151] at Module.load (module.js:487:32)
2017-02-10 09:44:10 default[20170210t104151] at tryModuleLoad (module.js:446:12)
2017-02-10 09:44:10 default[20170210t104151] at Function.Module._load (module.js:438:3)
2017-02-10 16:20:02 default[20170210t124920] Error: Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "connect ETIMEDOUT 74.125.202.84:443".
2017-02-10 16:20:02 default[20170210t124920] at /app/node_modules/firebase-admin/lib/firebase-app.js:74:23
2017-02-10 16:20:02 default[20170210t124920] at process._tickCallback (internal/process/next_tick.js:103:7)
我该如何解决这个问题??
【问题讨论】:
遇到了类似的问题,也有“找不到模块'serviceAccountKey.json'。我感觉这与firebase-admin模块有关。 脚本在本地工作吗?是否仅在您部署到 GAE 时才会失败? 我不确定我应该如何在本地测试它...不是节点专家(还),你能指导我如何做吗? 有人吗?我想解决这个问题:) @jacobawenger,或者知道的人......我也有同样的问题。您能否指定如何部署 serviceAccountKey.json 文件?我的应用程序在本地运行,但是当我部署时,我得到了问题中描述的错误。 【参考方案1】:我可以像这样解决这个过程: (在 app.js 代码中传递 serviceAccountkeyFile.json 参数):
let defaultAppConfig =
credential: admin.credential.cert(
type: "service_account",
project_id: "txxxxxxxxxx",
private_key_id: "xxxxxxxxxxxxxxxxxxxxxxxxxx",
private_key: "-----BEGIN PRIVATE KEY----------END PRIVATE KEY-----\n",
client_email: "firebaxxxxxxx@xxxxxxx.gserviceaccount.com",
client_id: "11111111111111111",
auth_uri: "https://accounts.google.com/o/oauth2/auth",
token_uri: "https://accounts.google.com/o/oauth2/token",
auth_provider_x509_cert_url: "https://www.googleapis.com/oauth2/v1/certs",
client_x509_cert_url: "https://www.googleapis.com/robot/v1/metadata/x509/jjjjjj.gserviceaccount.com"
),
databaseURL: 'https://projectxxx.firebaseio.com/'
defaultApp = admin.initializeApp(defaultAppConfig);
【讨论】:
这种方式显示红色下划线并显示错误 'type:string.... 类型的参数不能分配给类型参数 @AdirZoari,这个红色下划线出现在代码的什么地方?我可以想象您可以验证您的 lint 组件(jslint、eslint 等)。如果它们的配置不完美和正确,有时我们会遇到您提到的这些行为... 你可以看到我在这里发布的问题***.com/questions/50272165/… 你在使用 TypeScript 吗?来自它的典型消息...如果是这样,请正确配置您的 lint。例如,如果您使用 ESLINT,请正确配置它。我上面写的例子来自一个运行良好的 Node.js 文件。 建议不要在你的源代码中包含秘密,以防它在 GitHub 上公开。【参考方案2】:我在运行gcloud app deploy
时遇到了类似的问题
Error: Cannot find module 'webpack-dev-server'
at Function.Module._resolveFilename (module.js:469:15)
我解决了在package.json
中将给定依赖项(wepack-dev-server)从devDependencies
移动到dependencies
的问题。
如果其他人有同样的问题,我建议查看package.json
中的依赖项。 dependencies
需要运行,devDependencies
仅用于开发,例如:单元测试、Coffeescript 到 javascript 的转译、缩小,
【讨论】:
【参考方案3】:这些问题似乎是由于对require()
路径工作原理的误解造成的。您不能使用绝对路径,因为在部署应用程序并且导入将失败时,远程计算机上显然不会存在类似 require("/Users/username/somepath")
的内容。使用require("serviceAccountKey.json")
将在 node_modules/serviceAccountKey.json 相对于应用程序目录中查找。
如果你想从应用的根目录加载 serviceAccountKey.json,你可以使用require("./serviceAccountKey.json")
。如果它位于根目录下名为 foo 的子目录中,您将使用require("./foo/serviceAccountKey.json")
。这也适用于加载模块,例如 firebase-admin
。
NodeJS Modules documentation 更详细地解释了require()
机制。
【讨论】:
这是一个很好解释的答案。这应该是公认的答案。谢谢。以上是关于Google App Engine - 节点:找不到模块“firebase-admin”的主要内容,如果未能解决你的问题,请参考以下文章
Google Cloud App Engine 文件存储备份
如何将 socket.io 部署到 Google App Engine?
Google App Engine Node.js 本地开发服务器是不是支持 SSL?
在 Google-App-Engine 中使用 HSQLDB
Google Cloud 中的 Google Compute Engine、App Engine 和 Container Engine 有啥区别?