更新后出现Firebase函数错误.我能做什么



我更新了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的方法。

将firebase管理和firebase函数降级到版本:"firebase管理员":"8.10.0"firebase函数":"3.6.1";它会起作用的。

感谢Marcel Hoekstra在评论中发表这篇文章。

正如Uzbekhon所说,如果运行节点v8而不是v10,则可能会出现此错误。一些评论提到这不是理想的解决方案,因为他们不想升级到Firebase的Blaze计划。不幸的是,在这件事上很快不会有太多选择。

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

博客文章将您的Firebase云功能迁移到Node.js 10非常适合解释如何升级到v10。我按照作者的步骤进行了重新部署——没有错误,也没有弃用警告。

所需更新

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

  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控制台中删除。

如果运行Node.jsv8,也可能会出现此错误。升级到Node.jsv10解决了此错误。

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

nvm install v10 --lts

我认为这是一个比降级firebase-admin库更好的解决方案。

相关内容

  • 没有找到相关文章

最新更新