如何修复节点中的“解析错误:意外的令牌 =>”?
Posted
技术标签:
【中文标题】如何修复节点中的“解析错误:意外的令牌 =>”?【英文标题】:how to fix 'parsing error: Unexpected token =>' in node? 【发布时间】:2019-09-25 21:16:37 【问题描述】:我正在使用 firebase 功能进行条带支付集成。这个特殊的功能用于注册客户与条纹。
节点版本 10.15.3,
npm 版本 6.9.0,
“ecmaVersion”:.eslintrc.json 中的 6 个
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const stripe = require('stripe')(functions.config().stripe.testkey)
exports.createStripeCustomer = functions.auth.user()
.onCreate(async (user) =>
const customer = await
stripe.customers.create(email: user.email);
await admin.firestore()
.collection('stripe_customers')
.doc(user.uid)
.set(customer_id: customer.id);
);
代码与github上提供的firebase平台示例代码相同 https://github.com/firebase/functions-samples/blob/master/stripe/functions/index.js
解析错误:意外的令牌 =>
如果我将 .eslintrc.json 中的 "ecmaVersion": 6 更改为 "ecmaVersion": 8
then error is .onCreate(async (user) =>
^
SyntaxError: Unexpected token (
我想正确部署功能,以便用户可以在 firebase 存储中的条带和日期存储上注册
【问题讨论】:
我认为不需要异步,只需从您的 onCreate 方法中删除异步即可。exports.createStripeCustomer = functions.auth.user().onCreate((user) => // ... ) ; 现在它给出解析错误:Unexpected token admin 您在运行代码时收到此错误还是 eslint 错误? 我认为代码在函数部署正确并且新用户注册到 firebase authentication 时运行。在创建用户时运行此代码。但是错误在终端中给出了这些行:npm ERR!代码 ELIFECYCLE npm 错误! errno 1 npm 错误!函数@ lint:eslint .
npm ERR!退出状态 1 npm ERR! npm 错误! functions@lint 脚本失败。
@ray 所以它显然不喜欢 async/await 语法。但是:这个 node 失败了吗?因为我很确定节点本身可以很好地运行它。您确定这不仅仅是您的 linter/transpiler 是一些不知道 async/await 是真正关键字的旧版本吗?
【参考方案1】:
看起来你在谈论一个 eslint 错误。我已经能够使用 ecmaVersion 2015 在 eslint 演示页面中 reproduce 它。
我刚刚将其更改为 ecmaVersion 2017(支持 async/await
时的版本)并且错误已消失 (link)。
另外,验证了您正在谈论的项目中的 eslint 配置。这是 ecmaVersion 2017:link
【讨论】:
问题已解决 我只运行这两个命令 1. npm install firebase-functions@latest firebase-admin@latest --save。 2. npm install -g firebase-tools 我觉得可以。更新 Firebase 工具,现在不会出错 您没有说明是节点错误还是 eslint 错误。这对将来提出问题的人会有所帮助。 我认为它不是代码错误,实际上在部署时运行这些命令之前它会显示 Node.js 6 但之后它会在部署时显示 Node.js 8,所以我认为这解决了我的问题和ESLint 也内置了 firebase 工具,因为当我们运行 firebase init 时它会要求它,所以它是否也可以更新 ESLint 或者在我的问题中可能是 ESLint 和节点不兼容我认为是@Maaz Syed Adeeb【参考方案2】:确保您在本地机器节点中运行 >= 8。对于部署,您的 package.json 中应该有。
//...
"engines":
"node": "8"
,
//...
对于 eslint,要启用对异步函数的解析,您应该将其包含在配置中:
"parserOptions":
"ecmaVersion": 2017
【讨论】:
【参考方案3】:我是 React-native + firebase 功能的新手。但是有了这些代码行,lint 问题就解决了,我现在可以部署 firebase 函数了。
旧
"$schema": "./node_modules/@react-native-firebase/app/firebase-schema.json",
"react-native":
"crashlytics_auto_collection_enabled": true,
"crashlytics_debug_enabled": true,
"messaging_android_notification_channel_id": "high-priority",
"messaging_ios_auto_register_for_remote_messages": true
,
"functions":
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint"
],
"source": "functions"
新的
"$schema":"./node_modules/@react-native-firebase/app/firebase-schema.json",
"react-native":
"crashlytics_auto_collection_enabled": true,
"crashlytics_debug_enabled": true,
"messaging_android_notification_channel_id": "high-priority",
"messaging_ios_auto_register_for_remote_messages":true
【讨论】:
以上是关于如何修复节点中的“解析错误:意外的令牌 =>”?的主要内容,如果未能解决你的问题,请参考以下文章