如何修复 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 中的意外令牌?的主要内容,如果未能解决你的问题,请参考以下文章
在 Firebase 云函数中包含异步函数(eslint“解析错误:意外的令牌函数”)