Firebase部署错误 - 找不到模块“firebase”

9

我想部署从数据库事件触发的Google Cloud函数触发器,但是当我运行 firebase deploy时,函数没有成功部署,我收到一个错误,提示 Error: Cannot find module firebase

在我最初创建项目时,我可以毫无问题地部署函数。距上次部署已经过去几天了,但现在我在所有函数(不仅仅是触发器函数)中都遇到了这个问题。

我的函数:

exports.deleteNotificationOnUnlike = functions
    .region("us-central1")
    .firestore.document("likes/{id}")
    .onDelete((snapshot) => {
        return db
            .doc(`/notifications/${snapshot.id}`)
            .delete()
            .catch((err) => console.error(err));
    });

Package.json

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "serve": "firebase serve --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "8"
  },
  "dependencies": {
    "busboy": "^0.3.1",
    "firebase-admin": "^8.0.0",
    "firebase-functions": "^3.1.0"
  },
  "devDependencies": {
    "firebase-functions-test": "^0.1.6"
  },
  "private": true
}

期望函数成功部署,但出现以下错误:

来自 Firebase 的错误消息:

Code in file index.js can't be loaded.
Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module 'firebase'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/srv/handlers/users.js:5:18)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)

{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","status":{"code":3,"message":"INVALID_ARGUMENT"},"authenticationInfo":{"principalEmail":"*********"},"requestMetadata":{"requestAttributes":{},"destinationAttributes":{}},"serviceName":"cloudfunctions.googleapis.com","methodName":"google.cloud.functions.v1.CloudFunctionsService.CreateFunction","resourceName":"projects/*******/locations/us-central1/functions/createNotificationOnComment"}

我看到一些帖子中有人缺少一些模块,需要在函数文件夹内运行npm i XXX,但我没有看到任何实例表明找不到Firebase模块,我不确定与我的上一次成功部署相比发生了什么变化或者我可能缺少哪个模块。


尝试删除 node_modules 文件夹并重新执行 npm install 命令。同时,使用最新的 firebase 包进行尝试。 - Chaitanya
我没有看到你的代码中实际尝试使用firebase模块的地方。此外,你的package.json甚至没有显示它已安装。最后,你可能根本不应该使用firebase模块,因为那是用于前端应用程序的。像你部署到Cloud Functions的后端代码通常只需要使用firebase-admin即可。 - Doug Stevenson
3个回答

28

找到解决方案了。我没有在functions文件夹中安装firebase模块,但已经在父文件夹中包含它。 我进入functions并运行了npm install --save firebase,部署成功。


0

请确保您已从函数目录而非项目目录安装了该软件包。我曾经因为在项目目录中意外安装软件包而多次遇到此错误。在本地环境下,这样做可能没有问题,但在部署过程中会出现错误。因此,请前往函数目录并从那里安装。

cd functions
npm install [your package]

然后通常就可以正常工作了


-2

尝试更新 Firebase 的 npm 包,我的问题通过 npm install -D firebase 得到解决。

-保持安全!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接