ESLint报“import is reserved”错误,是因为未配置parserOptions.sourceType为"module"且未同步设置ecmaVersion(如2022),导致其以script模式解析ES模块语法;须用module.exports导出配置,并确保文件名正确、VSCode重载窗口生效。

这是 ESLint 没正确识别 ES 模块语法导致的,不是代码写错了,而是配置没告诉它“这是支持 import/export 的现代 JS”。
parserOptions.sourceType 必须设为 "module"
ESLint 默认按脚本(script)模式解析文件,而 import 只在模块(module)模式下合法。不设这个,哪怕你用的是 .mjs 或 type: "module",ESLint 仍会报 Parsing error: The keyword 'import' is reserved。
-
sourceType: "module"告诉 ESLint 启用模块语法支持 - 必须和
ecmaVersion配合使用,比如ecmaVersion: 2022或至少ecmaVersion: 6 - 不能只写
sourceType,漏掉ecmaVersion会导致某些新语法(如可选链)仍报错
在 .eslintrc.js 中补全:
module.exports = {
"parserOptions": {
"ecmaVersion": 2022,
"sourceType": "module"
}
};
@babel/eslint-parser 不是必需的,但要慎用
早期项目常误以为必须装 @babel/eslint-parser(旧名 babel-eslint)才能支持 import,其实只要 sourceType: "module" 就够了。Babel parser 是为实验性语法或非标准扩展准备的,比如 export type、装饰器、JSX 自定义标签等。
- 纯标准 ES 模块 + 常见语法 → 用默认 parser(
espree)+ 正确parserOptions即可 - 用了 Babel 插件(如
@babel/plugin-proposal-decorators)→ 才需要显式配parser: "@babel/eslint-parser" - 配了
@babel/eslint-parser却没装对应@babel/core和插件 → 会直接报Failed to load parser
检查 .eslintrc.js 是否被真正加载
VSCode 右下角显示 “ESLint” 并不表示配置生效——常见假阳性:
-
.eslintrc.js里用了export default→ Node.js 加载失败,必须用module.exports = { ... } - 项目根目录没有配置文件,或文件名写成
.eslintrc(缺后缀)、eslintrc.js(缺点)→ ESLint 直接跳过 - TypeScript 项目漏了
parserOptions.project(如"./tsconfig.json")→import虽不报错,但类型相关规则(如@typescript-eslint/no-unused-vars)全失效 - 运行
npx eslint --print-config src/index.js看输出:如果报Failed to load config,说明路径、语法或依赖有硬伤
TS/JSX/Vue 文件需额外声明语言支持
ESLint 默认只处理 .js 和 .jsx,其他后缀必须显式告知:
-
.ts/.tsx:确保eslint.validate包含"typescript"和"typescriptreact",且parser是@typescript-eslint/parser -
.vue:在eslint.validate中加{"language": "vue", "autoFix": true},否则单文件组件里的<script></script>块直接被忽略 -
.d.ts:声明文件不该走 JS 解析器,加/**/.d.ts到.eslintignore,否则declare module会被当成非法 JS
最易被忽略的是:你以为改了配置就完事,其实 VSCode 可能还在用旧缓存;关掉窗口重开项目,或执行 Developer: Reload Window,再看右下角 ESLint 图标是否稳定亮起。


















