Firebase firestore 函数部署因意外标记“.”而失败。可选链

Firebase firestore function deploy failed due to unexpected token "." optional chaining

我正在尝试使用包含可选链接的代码部署 node.js 触发器和函数。我以前部署此代码没有错误,但现在遇到此错误:

return this.roles?.includes(role.toString()) ? true : false; 
                  ^ 

SyntaxError: Unexpected token '.'
    at wrapSafe (internal/modules/cjs/loader.js:915:16)
    at Module._compile (internal/modules/cjs/loader.js:963:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Module.require (internal/modules/cjs/loader.js:887:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (/workspace/diwimaModelWeb/lib/network/index.js:13:14)
    at Module._compile (internal/modules/cjs/loader.js:999:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10) 

我使用 typescript,tsconfig.ts 中配置的构建目标是“es2020”。我可以检查代码并用 null cheking 替换所有可选链接,但我宁愿不这样做,因为我之前部署它没有问题。

对于遇到此问题的任何人。我在自己写这个问题的过程中修复了它,我注意到我使用不同的节点和 npm verisons 来构建和上传,nvm 就像那样棘手:D。我还在 tsconfig 中选择了“es2017”。不是 100% 确定是什么修复了它。

我遇到了同样的问题,确实是节点版本不匹配。 (虽然不是 npm,但那不重要)。

解决步骤:

  1. 检查您的本地节点版本:nvm --version (如果您从他们的网站手动安装,我建议现在开始 use nvm :)

  2. 确保在 package.json 中设置相同 例如"engines": {"node": "14"},

  3. 根据需要在 tsconfig.json 中设置您的 ES 版本。 例如"target": "ES2020", 它应该与您的节点版本兼容。 ES versions' feature highlights here and the list of node versions supported by firebase here.

    列表

可选,如果您仍有问题:

  1. 确保到目前为止提到的所有内容都在您的 firebase 应用程序的 functions 文件夹中(例如,您没有意外地在根文件夹中安装依赖项)。

  2. 如果需要,检查并更新 firebase 工具和 firebase 包。例如npm install --save firebase-functions

  3. 删除 package-lock.json 然后再次构建 + 部署(npm run lint && tscfirebase deploy --only functions)。有可能你的一些依赖安装搞砸了,例如你没有 --save 它们(至少我在上一步尝试解决最初的问题时这样做了)。