[英]Why when a Node.JS app is integrated with Firebase it crashes?
首先,我按照 Express Getting started并开发了一个 Hello World 应用程序。 其次,我遵循了Firebase的 Node.JS 应用指南并配置了Cloud Functions 。
最终得到以下项目结构。
> bin/
> www.js
> src/
> controllers
> routes
> more modules
> test/
> src
> functions/
> index.js
> package.json
> app.js
> package.json
functions/index.js
的内容是:
const functions = require('firebase-functions');
const app = require('../app');
exports.app = functions.https.onRequest(app);
现在,当尝试部署它时失败并出现下一个错误。
Cannot find module '../app'
Cloud Functions 在部署时上传functions/
目录的内容,因此其中没有 Node.JS 应用程序。
有几种方法可以解决它。 一种方法是按照以下步骤在部署之前复制应用程序。
在 index.js 中更新应用程序的路径。
-- const app = require('../app'); ++ const app = require('./app');
package.json
所有dependencies
(不要与devDependencies
混淆)必须安装在functions/package.json
。 例如:如果@google-cloud/firestore
被声明为应用程序的依赖项,那么它必须按如下方式安装。
cd functions && npm i @google-cloud/firestore
在部署之前将应用程序复制到 Functions 模块中。 这可以通过firebase.json
文件通过使用以下块更新它来完成。
"functions": { "predeploy": "mkdir functions/app && cp -r {app.js,src} functions/app", "postdeploy": "rm -r functions/app" }
现在再次部署将起作用。
firebase deploy # success!
发生的事情是 Node.JS 应用程序在运行部署步骤之前被复制和粘贴。 然后部署不仅将功能上传,还将所需的应用程序上传到云中。 然后,当执行功能时,应用程序也会执行。
如第 2 步所述,应用程序的依赖项也安装在 Functions 模块中。 否则部署将因缺少依赖项而失败。 package.json
在本地使用,而functions/package.json
在云上使用。 通过遵循这种方法,您需要跟踪依赖项并确保在两个模块中都安装了相同的依赖项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.