[英]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.