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 有啥区别?

连接 Google App Engine 和 Google Compute Engine