es modules 是 ecmascript 官方模块化标准,使用 import/export 语法;eslint 需配置 sourcetype: 'module'、ecmaversion 和对应环境才能正确解析,否则报“import is reserved”错误。

ES Modules 的导入语法本身是语言标准,但 ESLint 能帮你在使用过程中避免常见错误、统一风格、提前发现潜在问题。关键不在于“让 ESLint 支持 import”,而在于用对规则、配好环境、避开陷阱。
确保 ESLint 正确识别 ES Module 语法
ESLint 默认按 CommonJS 解析,若项目用 import/export 却没配置好,会直接报错“Parsing error: The keyword 'import' is reserved”。必须显式声明模块类型:
-
在
.eslintrc.js中设置sourceType: 'module':parserOptions: { ecmaVersion: 'latest', sourceType: 'module' } -
启用对应环境:比如浏览器项目加
browser: true,Node.js 项目加node: true,否则全局变量(如process)或内置对象(如fetch)可能被误报未定义 -
TypeScript 项目额外注意:需使用
@typescript-eslint/parser,且tsconfig.json中module字段应为"ESNext"或"NodeNext",否则 ESLint 可能解析失败
常用导入相关规则配置
ESLint 官方和插件提供多条直接约束 import 行为的规则,建议启用并合理设级:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
no-unused-vars:防止import { foo } from './utils';却没用到foo—— 这类未使用导入会增加包体积,也暴露逻辑疏漏 -
import/no-unresolved(需eslint-plugin-import):检查路径是否存在,避免拼写错误或别名配置遗漏导致运行时报错 -
import/first:强制所有import必须在文件顶部,禁止出现在函数内或变量声明后,保障静态分析可靠性 -
import/no-duplicates:同一模块多次导入(如分别import a from 'x'; import { b } from 'x';)会被合并,减少冗余 -
import/order:统一导入顺序(如先内置模块 → 第三方 → 本地),提升可读性;配合eslint-config-prettier关闭与 Prettier 的格式冲突
处理动态 import 和特殊场景
ES Modules 支持 import('./module.js') 动态导入,ESLint 默认不校验其返回值类型或路径有效性,需针对性配置:
- 动态导入的 Promise 返回值建议用
await或.then()处理,可用no-async-promise-executor避免嵌套错误 - 若用 Webpack 别名(如
@/components),需在settings.import/resolver中配置别名映射,否则no-unresolved会误报 - 条件导入(如
if (env === 'dev') import('./debug.js'))属于运行时行为,ESLint 无法静态分析,应尽量避免;如必须使用,可用// eslint-disable-next-line import/no-unresolved注释临时忽略
与构建工具协同验证
ESLint 检查的是源码层面的导入结构,但真实模块解析由打包器(如 Vite、Webpack)或浏览器完成。二者需保持一致:
- Vite 项目默认支持
.js后缀省略,但 ESLint 的import/no-unresolved默认要求写全后缀;可在规则中配置extensions: ['.js', '.ts', '.jsx']统一判断标准 - 使用
export * as ns from './x'时,确保导出模块实际存在命名导出,否则 ESLint 不报错但运行时会失败;建议搭配 TypeScript 的isolatedModules: true提前拦截 - CI 流程中建议同时运行
eslint --ext .js,.ts src/和vite build,双保险覆盖静态与动态导入问题
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










