ESLint报Parsing error: Unexpected token with错误,如何在保留ESLint与Prettier双规则校验的前提下解决该问题?
ESLint报Parsing error: Unexpected token with错误,如何在保留ESLint与Prettier双规则校验的前提下解决该问题?
我来帮你梳理下这个问题的根源,再一步步帮你解决它:
问题根源
你遇到的Parsing error: Unexpected token with错误,核心原因是当前ESLint使用的默认解析器(Espree)还不能正确识别最新的import...with断言语法。你虽然已经安装了Babel相关的语法插件,但并没有让ESLint用上Babel解析器来处理这个语法。至于去掉eslintPluginPrettier后错误消失,是因为插件的默认配置和当前解析器设置产生了冲突,但这显然不是长久之计——毕竟我们需要同时保留ESLint的代码规则校验和Prettier的格式校验。
具体解决步骤
我们的目标是让ESLint通过Babel解析器识别import断言语法,同时保留Prettier的集成,具体操作如下:
1. 在ESLint配置中指定使用Babel解析器
打开你的eslint.config.js,在自定义配置的languageOptions中添加解析器配置,让ESLint使用@babel/eslint-parser来处理代码:
import pluginJs from '@eslint/js'; import eslintPluginPrettier from 'eslint-plugin-prettier/recommended'; import globals from 'globals'; /** @type {import('eslint').Linter.Config[]} */ export default [ { languageOptions: { // 新增:指定Babel作为ESLint解析器 parser: '@babel/eslint-parser', parserOptions: { // 配置Babel选项,启用import断言语法插件 requireConfigFile: false, // 如果你有单独的Babel配置文件(如.babelrc),可以设为true或指定路径 babelOptions: { plugins: ['@babel/plugin-syntax-import-assertions'], }, }, globals: { ...globals.browser, ...globals.jest }, ecmaVersion: 2024, sourceType: 'module' }, rules: { // 你的自定义规则 } }, pluginJs.configs.recommended, eslintPluginPrettier // 保留这个,确保Prettier通过ESLint运行 ];
2. (可选)配置Babel全局配置(如果使用单独的Babel文件)
如果你习惯用单独的.babelrc或babel.config.js来管理Babel配置,可以在其中添加语法插件,这样就不用在ESLint配置里重复写了:
// .babelrc { "plugins": ["@babel/plugin-syntax-import-assertions"] }
这时,你可以把ESLint配置里的parserOptions.babelOptions去掉,只保留parser: '@babel/eslint-parser'即可。
3. 验证配置是否生效
- 先重启VS Code的ESLint服务(可以按
Ctrl+Shift+P,输入ESLint: Restart ESLint Server) - 打开有问题的JS文件,查看
Parsing error是否消失 - 故意写一个不符合Prettier格式的代码(比如多打几个连续空格),检查ESLint是否会报Prettier相关的错误——如果有,说明Prettier仍然在lint时正常运行
额外注意点
- 你使用的Prettier 3.4.2版本已经支持
import...with断言语法,所以不需要额外配置Prettier - 确保
@babel/eslint-parser和你的ESLint版本(9.18.0)兼容,你当前的版本组合是完全没问题的
这样操作后,既能解决ESLint的解析错误,又能同时保留ESLint的代码规则校验和Prettier的格式校验啦。
备注:内容来源于stack exchange,提问作者srbrills
相关产品推荐
相关产品推荐

