【问题标题】:Firebase-Functions error after update. What can I do?更新后的 Firebase-Functions 错误。我能做些什么?
【发布时间】:2021-02-10 23:37:03
【问题描述】:

我更新了我的 firebase 功能,现在我在 Firebase 控制台中收到此错误。代码还是一样,但是我现在得到一个错误:

/srv/node_modules/@google-cloud/firestore/build/src/collection-group.js:54
    async *getPartitions(desiredPartitionCount) {
          ^

SyntaxError: Unexpected token *
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:617:28)
    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)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/srv/node_modules/@google-cloud/firestore/build/src/index.js:39:28)

这是我的云函数 TypeScript 源码:

import * as functions from 'firebase-functions';
import admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

/********************************************************************/

exports.newChatMessage = functions.firestore
  .document('/games/{gameId}/chat/{chatId}')
  .onCreate((snap, context) => {

    const createData = snap.data();
    if(!createData) {
        return false;
    }

    const chatMessage = createData.message;
    if(!chatMessage) {
        return false;
    }

    console.log('New Chat message in game: ', context.params.gameId);

    const payload = {
        notification: {
            title: 'New chat message',
            body: chatMessage,
            icon: 'ic_notification'
        }
    }

    return admin.firestore().collection(`/games/${context.params.gameId}/members`).where( 'notificationChat', '==', true ).get().then( members => {
        members.forEach( member => {
            if(member.id !== createData.user) {
                return admin.firestore().doc(`/users/${member.id}`).get().then( memberdata => {
                    if( memberdata.get('firebaseToken') === '' ) {
                        return memberdata.data();
                    } else {
                        return admin.messaging().sendToDevice(memberdata.get('firebaseToken'), payload).catch( error => { console.log(error) });
                    }
                }).catch( error => { console.log(error) });
            } else {
                return false;
            }
        })
    }).catch( error => { console.log(error) });

});

这是什么?在我的函数中没有任何名为 *getPartitions 的方法。

【问题讨论】:

  • 请编辑问题以说明您的升级路径。您究竟做了什么更改以产生此错误?您的问题中应该有足够的信息,以便任何人都可以重现该问题。
  • 哪个版本的节点?
  • 我仍在使用节点 8.. 但这和以前一样
  • Firebase 库需要 Node 10。从 legacy-8 安装以支持 Node 8:npmjs.com/package/@google-cloud/…
  • 我遇到了同样的错误。我降级:firebase-admin 和 firebase-functions 到我以前工作的新版本:“firebase-admin”:“^8.10.0”,“firebase-functions”:“^3.6.1”,它工作。跨度>

标签: javascript node.js firebase google-cloud-functions


【解决方案1】:

将 firebase-admin 和 firebase-functions 降级到版本:"firebase-admin": "^8.10.0", "firebase-functions": "^3.6.1" 就可以了。

感谢 Marcel Hoekstra 在 cmets 中发布此内容。

【讨论】:

  • 我也试过了,但对我来说它不起作用......我也尝试降级 firebase-tools 但仍然是同样的错误:(
  • 啊,好的,谢谢你们,npm install 命令给了我错误,但是 firebase depoy 命令正在工作:)
  • 这就是有效的解决方案! 重要提示: 不要运行 npm audit fix --force 来修复漏洞(我的有 4 个),因为它无济于事。如前所述,只需降级,运行npm install 并部署您的功能。
  • 这对我不起作用,直到我按照 @guy-incognito 的建议使用 legacy-8 将 @google-cloud/firestore 降级为 ^3.8.6。
【解决方案2】:

如果您正在运行 Node.js v8,您也可能会收到此错误。升级到 Node.js v10 可解决此错误。

如果您使用 nvm 管理您的 Node.js 版本,请运行:

nvm install v10 --lts

我认为这比降级 firebase-admin 库更好。

【讨论】:

  • 也许可以,但为此您需要升级到 blaze 计划,这不是我想要的 :)
  • 无论您是否要升级到 Blaze 计划,这可能是更好的解决方案,因为 Firebase 已弃用 Node 8。这意味着到 2021 年 2 月,您的任何功能都将不起作用
  • 如果我更改为 blaze 计划,是否有可能限制成本?如果用户对我的 Firestore 进行数百万次读取,我不想为此付费......
【解决方案3】:

作为Uzbekjon stated,如果运行节点v8 而不是v10,则会出现此错误。一些 cmets 提到这不是理想的解决方案,因为他们不想升级到 Firebase 的 Blaze 计划。不幸的是,在这件事上很快就没有太多选择了。

如果您在控制台中转到 Firebase 函数,您会注意到“Node V8 已被弃用”的警告。自 2021 年 2 月 15 日起,您将无法再使用 Node.js V8 更改或部署任何功能。自 2021 年 3 月 15 日起,您将无法再使用这些功能。它们将被完全阻止执行。

博文 Migrate your Firebase Cloud Functions to Node.js 10 非常适合解释如何升级到 v10。我按照作者的步骤重新部署——没有错误也没有弃用警告。

必需的更新

  1. 检查以确保您的机器上至少全局安装了 Node.js V10 node --version

  2. npm install -g firebase-tools@latest(您至少需要版本 8.1.0

  3. 在您的 package.json 文件中,确保 Node.js V10 的目标如下:

     "engines": {
       "node": "10"
     }
    
  4. 检查您的 Firebase 环境变量。我链接的源更详细并链接了其他解释源,但基本上升级可能意味着默认环境变量名称已更改(我不必在这里更改任何内容)。

推荐

  1. 确保firebase-functions 至少是3.7.0 版本。无论如何,我不得不更新它以解决另一个错误。

可选,但仍推荐

  1. tsconfig.json 中更新您的编译器选项。这样就不会转译不必要的语言版本。

     "compilerOptions": {
       "target": "es2018",
       "lib": ["es2018"],
     }
    
  2. 测试你的代码:)

就像我之前提到的,进行此升级为我消除了错误。进行新部署后,所有弃用警告也已从 Firebase Functions 控制台中删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2013-09-29
    • 2020-04-09
    • 1970-01-01
    • 2019-02-13
    • 2020-09-08
    相关资源
    最近更新 更多