部署Node.js环境Cloud Functions操作Firestore时遇Parsing error报错
云函数部署ESLint报错修复方案
报错本质
本次部署触发的是ESLint语法解析拦截,并非云函数运行时的逻辑错误,日志中提示的Unexpected token followedUserRef是解析错位的误导性报错,核心触发原因有三点:
onCreate回调函数未声明为async,却在函数体中直接使用await语法。ESLint解析到未被async上下文包裹的await关键字时,会将后续相邻的变量识别为异常token,触发解析失败。- 日志打印语句中
snapshot.data未加调用括号,属于方法引用而非执行方法,后续业务逻辑无法正常读取快照数据。 - 代码中引用的
admin对象未在文件顶部完成初始化,就算通过语法检查,运行时也会触发未定义引用错误。
修复后可正常部署的代码
// 引入依赖并初始化Admin实例 const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); exports.onCreateFollower = functions.firestore.document("/followers/{userId}/userFollers/{followerId}") // 给回调函数加async声明,匹配await语法使用场景 .onCreate(async (snapshot, context) => { console.log("Follower created", snapshot.data()); const userId = context.params.userId; const followerId = context.params.followerId; // 被关注用户的帖子集合引用 const followedUserPostRef = admin.firestore().collection('posts').doc(userId).collection('userPosts'); // 关注方的时间线集合引用 const timelinePostRef = admin .firestore() .collection('timeline') .doc(followerId) .collection('timelinePosts'); // 拉取被关注用户的全部公开帖子 const querySnapshot = await followedUserPostRef.get(); // 遍历帖子同步写入关注方的时间线 querySnapshot.forEach(doc => { if (doc.exists) { const postId = doc.id; const postData = doc.data(); timelinePostRef.doc(postId).set(postData); } }); });
部署前校验步骤
- 代码修改完成后,先在functions目录下执行
npm run lint,确认ESLint检查无报错后,再执行云函数部署命令 - 如果本地执行lint仍报async语法解析错误,检查functions目录下的
.eslintrc.json配置,确认ecmaVersion设置为2018及以上版本,该配置是默认Firebase云函数模板自带的配置,一般不需要手动修改,只要补全回调的async声明即可正常通过检查。
内容的提问来源于stack exchange,提问作者yousuf
相关产品推荐
相关产品推荐

