如何修复节点中的“解析错误:意外的令牌 =>”?

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
    

【讨论】:

以上是关于如何修复节点中的“解析错误:意外的令牌 =>”?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 R2jags::jags 中的“节点与父母不一致”

如何修复cassandra节点

如何重建zookeeper cluster中的单个节点

如何禁用节点自动修复

修复 D3 强制定向布局中的节点位置

有没有办法修复节点中的这个 Mailchimp API 错误?