我更新了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
。我按照作者的步骤进行了重新部署——没有错误,也没有弃用警告。
所需更新
-
检查以确保您的机器
node --version
上至少全局安装了Node.js V10。 -
npm install -g firebase-tools@latest
(您至少需要版本8.1.0( -
在package.json文件中,确保Node.js V10的目标如下:
"engines": { "node": "10" }
-
检查您的Firebase环境变量。我链接到的源更详细,并链接到其他解释源,但基本上升级可能意味着默认环境变量名称已经更改(我不需要在这里更改任何内容(。
推荐
- 确保
firebase-functions
的版本至少为3.7.0
。我不得不更新这个以解决另一个错误
可选,但仍推荐
-
更新
tsconfig.json
中的编译器选项。这将使不必要的语言版本不会被转换。"compilerOptions": { "target": "es2018", "lib": ["es2018"], }
-
测试您的代码:(
就像我前面提到的,进行这次升级为我消除了错误。一旦我进行了新的部署,所有的弃用警告也从Firebase Functions控制台中删除。
如果运行Node.jsv8
,也可能会出现此错误。升级到Node.jsv10
解决了此错误。
如果您使用nvm
管理Node.js版本,请运行:
nvm install v10 --lts
我认为这是一个比降级firebase-admin
库更好的解决方案。