将箭头函数用于 Firebase 函数时的"Unexpected token"



我在尝试将函数部署到firebase时遇到ESLint错误。具体来说,当我认为firebase支持箭头功能时,它似乎不喜欢箭头功能。我使用默认情况下提供的ESLint,使用firebase init functions初始化函数文件。

/root/functions/helpertools.js
62:84  error  Parsing error: Unexpected token =>

第62行是以下代码块的第一行:

const getCostEstimateBetweenPlaceIDs = async (placeIdOrigin,placeIDdestination)=> {
let routeInfo = await calculateRoute(placeIdOrigin,placeIDdestination,true)
let minutes = convertHourMinTextToMinutes(routeInfo.duration)
let miles = convertKMTextToMiles(routeInfo.distance)
return {cost:uberCostEstimate(minutes,miles),minutes:minutes,miles:miles}
}

我的.eslintrc.js如下:

module.exports = {
root: true,
env: {
es6: true,
node: true,
},
extends: [
"eslint:recommended",
"google",
],
rules: {
quotes: ["error", "double"],
},
};

来自我的包.json:

"@eslint/eslintrc": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
"integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.1.1",
"espree": "^7.3.0",
"globals": "^13.9.0",
"ignore": "^4.0.6",
"import-fresh": "^3.2.1",
"js-yaml": "^3.13.1",
"minimatch": "^3.0.4",
"strip-json-comments": "^3.1.1"
}
},

来自我的package-lock.json:

{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"lint": "eslint .",
"serve": "firebase emulators:start --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "14"
},
"main": "index.js",
"dependencies": {
"firebase-admin": "^9.8.0",
"firebase-functions": "^3.14.1"
},
"devDependencies": {
"eslint": "^7.6.0",
"eslint-config-google": "^0.14.0",
"firebase-functions-test": "^0.2.0"
},
"private": true
}

我已经测试过了,我确认你肯定需要两件事来解决你面临的问题,那就是在包.json的脚本部分更改为以下内容:

CCD_ 3而不是默认的CCD_。因此,从中删除.,它是自动生成的,但可能会导致此类问题。

箭头函数是ES6的一个特性,但这里有一个异步箭头函数。异步函数通常是ES8(或2017(功能。因此,您需要指定将解析器的ecmaVersion更改为版本8,因此在.eslintrc.js文件中更改为:

parserOptions: { parser: 'babel-eslint', ecmaVersion: 8, },

这将使解析器知道期望=>使用async之后的令牌。

我遇到了完全相同的问题。

问题是ES6。您必须将其更改为ES8。

ES6于2015年左右发布,没有异步、等待或箭头功能。2017年发布的ES8具有异步、等待和箭头功能。

因此,在.eslintrc.json文件-中进行以下更改

env:{ es8:true, node:true }

对我来说,这很有效^

如果它对你不起作用,你可以尝试的另一件事是更改package.json

"scripts": { "lint": "eslint ." },

更改为:

"scripts": { "lint": "eslint" },

相关内容

最新更新