Google App Engine – 节点:无法find模块“firebase-admin”

第一次在这里部署一个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) 

我该如何解决 ??

这些问题似乎是由于误解了require()path的工作原因而造成的。 您不能使用绝对path,因为在部署应用程序时,远程计算机上显然不存在require("/Users/username/somepath") ,导入失败。 使用require("serviceAccountKey.json")将在node_modules / serviceAccountKey.json中查找相对于app目录。

如果你想从应用的根目录加载serviceAccountKey.json ,你可以使用require("./serviceAccountKey.json") 。 如果它位于根目录下的一个名为foo的子目录中,您将使用require("./foo/serviceAccountKey.json") 。 这也适用于一般的加载模块,比如firebase-admin

NodeJS模块文档更详细地解释了require()机制。

我可以在这个过程中解决这个问题:(在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); 

我有一个类似的问题,运行gcloud app deploy

 Error: Cannot find module 'webpack-dev-server' at Function.Module._resolveFilename (module.js:469:15) 

我解决了将给定的依赖关系(wepack-dev-server)从devDependenciespackage.json dependencies问题。

如果别人有同样的问题,我build议看看你的依赖package.jsondependencies是需要运行的, devDependencies只是为了开发,例如:unit testing,Coffeescript到Javascript转换,缩小,