You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NodeJS与Firebase Functions时遇Unexpected token '?'错误求助

解决Node.js + Firebase Functions中Unexpected token '?'错误

错误原因

这个报错本质是Node.js版本过低,不支持ES2020新增的可选链操作符(?.)。你的代码里没写?,但安装的依赖包(如firebase-functions、express或它们的子依赖)使用了该语法,而本地或云函数运行环境的Node.js版本无法解析。

解决步骤

  1. 检查并升级Node.js版本

    • 执行命令查看当前版本:node -v
    • Firebase Functions目前稳定支持Node.js 18/20版本,若你的版本低于16,务必升级。可以用nvm管理多版本:
      • 安装nvm后,运行nvm install 18安装指定版本,nvm use 18切换使用。
  2. 锁定云函数的Node.js版本
    在项目根目录的package.json中添加或修改engines字段,确保云函数运行环境和本地版本一致:

    "engines": {
      "node": "18"
    }
    
  3. 重新安装依赖

    • 删除本地的node_modules文件夹和package-lock.json文件
    • 执行npm install重新拉取适配当前Node.js版本的依赖包
  4. 更新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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:35:23