如何修复 ESLint 中的意外令牌?

Posted

技术标签:

【中文标题】如何修复 ESLint 中的意外令牌?【英文标题】:How to fix unexpected token in ESLint? 【发布时间】:2020-10-19 12:14:46 【问题描述】:

我在 Mac 上使用命令 npm install -g eslint 全局安装 ESLint。安装成功,但是当我运行eslint -v时,我遇到了这个问题:

$ npm install -g eslint
path/to/bin/eslint -> path/to/lib/node_modules/eslint/bin/eslint.js
+ eslint@7.3.1
added 107 packages from 63 contributors in 4.823s

$ eslint -v
path/to/lib/node_modules/eslint/bin/eslint.js:93
         catch 
                ^

SyntaxError: Unexpected token 
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:617:28)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Function.Module.runMain (module.js:694:10)
    at startup (bootstrap_node.js:204:16)
    at bootstrap_node.js:625:3

我想知道导致此问题的缺少哪些步骤?我正在使用 Node.js v8.16.2 和 NPM v6.4.1。

【问题讨论】:

你要么没有使用 Babel,要么没有允许你跳过错误“param”的设置(可选的 catch 绑定)—— catch (e) 可以工作。 我正在全局安装它。我需要在全局 eslint 文件夹中设置一些东西吗?我不明白为什么我需要添加参数。我只想展示我的 eslint 版本。 您使用的是哪个版本的 Node nodejs v8.16.2。对于 npm 6.4.1。 ESLint 7 放弃了对节点 8 的支持:eslint.org/blog/2020/05/eslint-v7.0.0-released。您需要该语言功能,这意味着至少节点 10:node.green/#ES2019-misc-optional-catch-binding 【参考方案1】:

发生错误是因为 catch 是一个相对较新的 (ES2019) 语言功能,称为 "optional catch binding";在引入之前,需要在语法上绑定捕获的错误(例如 catch (err) )。根据 node.green,您至少需要 Node 10 才能拥有该语言功能。

那么为什么在 ESLint 中会发生这种情况?例如the release blog,版本 7 已放弃对 Node 8 的支持;他们不再针对该版本进行测试,将假定支持更现代的语言功能。

要修复它,要么:

    升级节点(节点 8 是out of LTS,这就是 ESLint 放弃支持的原因);或 npm install eslint@6(如果要全局安装,请使用 -g)以使用支持 Node 8 的旧版 ESLint。

【讨论】:

这对我有帮助,但它只有在首先使用npm uninstall eslint 明确卸载过时的 lint 版本后才有效。感谢您的简洁解释! 我的 Webstorm 出于某种原因指向节点 8,尽管我安装了 14 个。必须手动将 IDE 指向节点 14,错误显然消失了 谢谢@IlyaKushlianski。这也是我的问题。【参考方案2】:

如果它对任何人都有帮助,我对另一个答案的看法略有不同。就我而言,错误发生在 Travis CI 构建过程中并导致它失败。我的解决方案是将我的.travis.yml 文件更新为node_js: "16"

【讨论】:

以上是关于如何修复 ESLint 中的意外令牌?的主要内容,如果未能解决你的问题,请参考以下文章

eslint“解析错误:JSX中的意外令牌”

ESLint:解析错误:意外令牌:

在 Firebase 云函数中包含异步函数(eslint“解析错误:意外的令牌函数”)

eslint 解析错误:带有异步的意外令牌函数

在代码中包含 @popperjs/core 和 eslint 时如何修复意外的 Webpack 错误

猫鼬模式预保存中的 ESLint 意外“this”错误