部署Firebase JavaScript函数时遭遇Parsing error: Unexpected token =>错误的排查求助
排查Firebase函数中
Parsing error: Unexpected token =>的问题 嘿,我来帮你拆解这个问题!你遇到的Parsing error: Unexpected token =>确实有点迷惑——毕竟Node.js 14.16.1完全支持箭头函数和async/await语法,咱们一步步来找出根源:
首先修正代码里的明显语法问题
虽然这不是直接触发箭头函数报错的原因,但这些小问题会让语法解析器混乱,间接引发误报:
- 模板字符串用错引号:你代码里的
"users/${userId1}/name"用了双引号,但模板字符串必须用反引号`,不然JS会把${userId1}当成普通文本,而不是变量插值。 - 多余空格导致的解析异常:你写的
. onWrite(async (event) =>里,onWrite()前面多了一个空格,应该改成.onWrite(async (event) =>。 - 文档数据获取遗漏:你直接用
await admin.firestore().doc(...).get()得到的是文档快照,需要调用.data()才能拿到里面的name字段内容。
修正后的代码示例:
exports.sendFriendRequest = functions.firestore.document("requests/{rUid}").onWrite(async (event) => { const userId1 = event.after.get("userId1"); const userId2 = event.after.get("userId2"); // 修正模板字符串引号,同时获取文档数据 const userNameDoc = await admin.firestore().doc(`users/${userId1}/name`).get(); const userName1 = userNameDoc.data(); console.log(userName1); const title = "New friend request"; // 同样修正模板字符串 const content = `${userName1} wants to be your friend`; console.log(content); const user2Doc = await admin.firestore().doc(`users/${userId2}`).get(); const fcmToken = user2Doc.get("fcm"); const message = { notification: { title: title, body: content, }, token: fcmToken, }; const response = await admin.messaging().send(message); console.log(response); });
核心排查:ESLint/语法检查工具的配置问题
Node.js 14支持箭头函数,但你的代码检查工具(大概率是ESLint)可能没配置正确的目标环境,导致它误以为你在用不支持的语法:
- 检查项目根目录下的
.eslintrc(或.eslintrc.json)文件,确保:env字段包含node: true,告诉ESLint你在Node环境下写代码parserOptions.ecmaVersion设为12(对应Node.js 14支持的ES版本)或"latest"
示例配置:
{ "env": { "node": true, "es2021": true }, "parserOptions": { "ecmaVersion": "latest" }, "extends": "eslint:recommended" } - 如果是Firebase Functions默认生成的项目,它自带的ESLint配置可能偏保守,可以手动调整上述参数,或者暂时关闭ESLint的语法检查(比如注释掉
.eslintrc)来测试是否是配置问题。
额外验证步骤
- 运行
firebase emulators:start启动本地模拟器,测试函数是否能正常解析运行 - 确认Firebase Functions的运行时版本是Node.js 14:在
firebase.json的functions字段里检查runtime配置,或者在函数目录的package.json里确认engines.node设为14.x
内容的提问来源于stack exchange,提问作者Opr Vld
相关产品推荐
相关产品推荐

