使用NodeJS与Firebase Functions时遇Unexpected token '?'错误求助
解决Node.js + Firebase Functions中Unexpected token '?'错误
错误原因
这个报错本质是Node.js版本过低,不支持ES2020新增的可选链操作符(?.)。你的代码里没写?,但安装的依赖包(如firebase-functions、express或它们的子依赖)使用了该语法,而本地或云函数运行环境的Node.js版本无法解析。
解决步骤
检查并升级Node.js版本
- 执行命令查看当前版本:
node -v - Firebase Functions目前稳定支持Node.js 18/20版本,若你的版本低于16,务必升级。可以用nvm管理多版本:
- 安装nvm后,运行
nvm install 18安装指定版本,nvm use 18切换使用。
- 安装nvm后,运行
- 执行命令查看当前版本:
锁定云函数的Node.js版本
在项目根目录的package.json中添加或修改engines字段,确保云函数运行环境和本地版本一致:"engines": { "node": "18" }重新安装依赖
- 删除本地的
node_modules文件夹和package-lock.json文件 - 执行
npm install重新拉取适配当前Node.js版本的依赖包
- 删除本地的
更新firebase-functions到兼容版本
执行命令更新核心依赖:npm install firebase-functions@latest
代码优化建议
你的代码中使用了同步的fs.readFileSync,在云函数环境中可能导致事件循环阻塞,建议替换为异步的fs.promises.readFile:
const functions = require("firebase-functions"); const express = require('express'); const fs = require('fs').promises; const app = express(); // 99 Names of Allah app.get('/99Names', async (req, res) => { try { const data = await fs.readFile('99namesofallah.json', 'utf8'); res.send(JSON.parse(data)); } catch (err) { res.status(500).json({ error: 'Failed to read file' }); } }); // Duas app.get('/duas', async (req, res) => { try { const data = await fs.readFile('dua/duas.json', 'utf8'); res.send(JSON.parse(data)); } catch (err) { res.status(500).json({ error: 'Failed to read file' }); } }); app.get('/duas/:edition', async (req, res) => { const edition = req.params.edition; try { const data = await fs.readFile(`dua/${edition}.json`, 'utf8'); res.send(JSON.parse(data)); } catch (err) { res.status(500).json({ error: 'Failed to read edition file' }); } }); exports.app = functions.https.onRequest(app)
内容的提问来源于stack exchange,提问作者azekkani
相关产品推荐
相关产品推荐

