ESLint 报错说不支持可选链操作符,是不是解析器没配对? 综敏 提问于 2026-03-10 15:49:16 阅读 41 工具 我在项目里用了可选链(?.)语法,但 ESLint 一直报错说 Unexpected token,明明我的 Node 和浏览器都支持啊。是不是 ESLint 的 parser 没设对? 我试过加 parserOptions 里的 ecmaVersion: 2020,但还是不行。下面是我代码里的一行: const name = user?.profile?.name; ESLint 我来解答 赞 18 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 长孙雯清 Lv1 你这问题我之前也遇到过,说白了就两个可能: 第一个,ESLint 版本太老。可选链这特性是 ESLint 6.x 才开始完整支持的,你可以看一下项目的 package.json 确认一下版本。如果是 5.x,升级一下就行: npm install eslint@latest --save-dev 第二个,如果是 Vue 项目,那大概率是 vue-eslint-parser 的问题。这货有时候会无视你外层的 ecmaVersion 设置,得在 parserOptions 里单独声明: { "parserOptions": { "ecmaVersion": 2020, "sourceType": "module" }, "parser": "vue-eslint-parser" } 或者在 rules 里加一条: "no-unexpected-multiline": "off" 不过更常见的做法是直接升级 vue-eslint-parser 到最新版本。 还有一个偏方,有些人会用 babel-eslint 或者 @babel/eslint-parser 做 parser,这俩对新版语法支持更好,但现在已经不推荐了,能用原生就用原生。 你先跑一下 eslint --version 看看版本号,基本就是版本问题。 回复 点赞 2026-03-11 08:22 Dev · 卫华 Lv1 你这个问题我之前也碰到过,确实挺烦的。 先说最可能的原因:你的 ESLint 版本太旧了。可选链是 ES2020 的特性,但很多老项目用的 ESLint 还是 6.x 版本,根本不支持。 你检查一下 ESLint 版本: npm eslint --version 如果是 6.x,先升级到最新版: npm install eslint@latest --save-dev 如果升级后还是不行,那就在你的 .eslintrc.js 里把配置写完整: module.exports = { parserOptions: { ecmaVersion: 2020, sourceType: 'module', }, env: { es2020: true, node: true, }, }; 还有一个坑:如果你的项目用了 Babel 转译(比如 create-react-app 或者 vue-cli 创建的项目),可能需要换成 babel-eslint 或者 @babel/eslint-parser 作为解析器: npm install @babel/eslint-parser --save-dev 然后在 .eslintrc.js 里加上: module.exports = { parser: '@babel/eslint-parser', parserOptions: { requireConfigFile: false, babelOptions: { presets: ['@babel/preset-env'], }, ecmaVersion: 2020, sourceType: 'module', }, }; 你先试试升级 ESLint + 完整配置,基本就能解决了。 回复 点赞 2 2026-03-10 18:10 加载更多 相关推荐 2 回答 118 浏览 ESLint和Prettier配置冲突怎么解决?代码格式检查老报错 最近团队要求统一代码规范,我把ESLint和Prettier都配上了,但每次保存代码都会报错,比如"Unexpected spaces"和"Missing semicolon"。 尝试过安装eslin... Zz子斌 前端 2026-02-17 00:11:28 2 回答 55 浏览 ESLint在GitHub Actions报错但本地正常,如何解决配置差异? 在给项目配置GitHub Actions时,ESLint突然报错Error: Definition for rule 'comma-dangle' was not found,但本地运行npx esl... 一世杰 工具 2026-02-09 19:13:22 2 回答 138 浏览 为什么VSCode里的ESLint报错和.eslintrc配置不一致? 我刚在项目里配好了.eslintrc.json,但VSCode里还是显示被禁用的规则报错。已经装了ESLint插件并重启过IDE,运行eslint .命令却提示没问题。 配置文件是这样的: { "ru... 怡辰 工具 2026-02-06 18:56:27 1 回答 89 浏览 ESLint 的 no-unused-vars 规则怎么配置才能忽略某些变量? 我在项目里启用了 ESLint,但 no-unused-vars 报错太多了,尤其是那些我故意留着备用的变量。比如: const debugMode = true; // 后面还没用到,但我不想删 试... ლ松奇 工具 2026-03-19 16:33:19 1 回答 46 浏览 ESLint 的 inline 注释怎么突然不生效了? 我之前用 // eslint-disable-next-line 跳过某一行的报错一直没问题,但今天突然不管用了,ESLint 还是报错。我检查了配置文件没动过,代码也没改,是不是有什么缓存或者版本问... Air-常青 工具 2026-03-15 11:10:23 2 回答 52 浏览 ESLint CLI 执行时怎么忽略某些文件? 我在项目里用 ESLint 检查代码,但有些生成的文件或者测试快照老是报错,想临时跳过它们。试过在命令后面加 --ignore-path .eslintignore,但好像没生效,是不是我写法不对? ... UX秀丽 工具 2026-03-12 11:55:19 1 回答 64 浏览 ESLint 自动修复为啥不生效? 我配置了 ESLint,也装了 Prettier,但在 VS Code 里保存时自动修复没反应,明明规则报错了。 我试过在 settings.json 里加了 "editor.codeActionsO... Top丶志利 工具 2026-03-09 14:30:21 1 回答 57 浏览 ESLint 插件为啥不识别 React 的 JSX 语法? 我装了 eslint-plugin-react,也配了 plugin 和 extends,但写 JSX 还是报错,说 Unexpected token '<',这到底咋回事? 我的组件... 克样 Dev 工具 2026-03-07 19:58:21 2 回答 104 浏览 为什么我的JavaScript代码在ESLint中报错 ‘no-undef’? 大家好,我在用ESLint检查代码时遇到了一个奇怪的问题。当我这样写配置函数的时候: function init() { console.log(myConfig.apiKey); // 这里报错 }... シ晶晶 前端 2026-01-29 20:16:24 2 回答 110 浏览 为什么ESLint CLI命令提示’找不到配置文件’? 我在项目根目录执行npx eslint .时一直报错:ESLint couldn't find a configuration file,但.eslintrc.js明明放在根目录了。试过加--ext ... 司空翌萌 工具 2026-01-29 17:58:27
第一个,ESLint 版本太老。可选链这特性是 ESLint 6.x 才开始完整支持的,你可以看一下项目的 package.json 确认一下版本。如果是 5.x,升级一下就行:
npm install eslint@latest --save-dev
第二个,如果是 Vue 项目,那大概率是 vue-eslint-parser 的问题。这货有时候会无视你外层的 ecmaVersion 设置,得在 parserOptions 里单独声明:
{
"parserOptions": {
"ecmaVersion": 2020,
"sourceType": "module"
},
"parser": "vue-eslint-parser"
}
或者在 rules 里加一条:
"no-unexpected-multiline": "off"
不过更常见的做法是直接升级 vue-eslint-parser 到最新版本。
还有一个偏方,有些人会用 babel-eslint 或者 @babel/eslint-parser 做 parser,这俩对新版语法支持更好,但现在已经不推荐了,能用原生就用原生。
你先跑一下
eslint --version看看版本号,基本就是版本问题。先说最可能的原因:你的 ESLint 版本太旧了。可选链是 ES2020 的特性,但很多老项目用的 ESLint 还是 6.x 版本,根本不支持。
你检查一下 ESLint 版本:
如果是 6.x,先升级到最新版:
如果升级后还是不行,那就在你的 .eslintrc.js 里把配置写完整:
还有一个坑:如果你的项目用了 Babel 转译(比如 create-react-app 或者 vue-cli 创建的项目),可能需要换成 babel-eslint 或者 @babel/eslint-parser 作为解析器:
然后在 .eslintrc.js 里加上:
你先试试升级 ESLint + 完整配置,基本就能解决了。