ESLint 的 eslintrc.cjs 和 eslint.config.mjs 是两种不同的配置文件格式,主要区别在于 配置系统版本、模块类型和 语法结构。以下是详细对比:
1. 配置系统版本
| 文件类型 | 所属系统 | 说明 |
|---|---|---|
.eslintrc.cjs |
旧版配置 | ESLint 传统配置方式(基于 eslintrc) |
eslint.config.mjs |
新版扁平化配置 | ESLint v8.23.0+ 引入的扁平化配置系统 |
-
旧版配置(
.eslintrc.cjs):- 支持多种格式:
.js、.cjs、.json、.yaml等。 - 配置通过
module.exports导出对象。 - 优先级由文件层级决定(如
src/.eslintrc会覆盖根目录配置)。
- 支持多种格式:
-
新版配置(
eslint.config.mjs):- 仅支持 ESM 模块(必须使用
.mjs或type: "module"的.js)。 - 配置通过
export default导出一个数组,允许多个配置叠加。 - 扁平化设计,无层级优先级,更易维护。
- 仅支持 ESM 模块(必须使用
2. 模块类型
| 文件类型 | 模块系统 | 适用场景 |
|---|---|---|
.eslintrc.cjs |
CommonJS | 旧项目或 package.json 中 "type": "commonjs" |
eslint.config.mjs |
ES Module (ESM) | 新项目或 package.json 中 "type": "module" |
.cjs:显式声明为 CommonJS 模块,适用于 Node.js 默认模块系统。.mjs:显式声明为 ESM 模块,适合现代浏览器或 ESM 项目。
3. 语法差异
旧版配置(.eslintrc.cjs)
module.exports = {
env: { node: true },
rules: {
"no-console": "error"
}
};
新版配置(eslint.config.mjs)
export default [
{
files: ["**/*.js"],
languageOptions: {
ecmaVersion: "latest"
},
rules: {
"no-console": "error"
}
}
];
- 新版配置是数组形式,支持多配置合并。
- 规则、插件等通过扁平化方式定义,更清晰。
4. 优先级
- 如果同时存在
eslint.config.mjs和.eslintrc.cjs,**ESLint 会优先使用eslint.config.mjs**。 - 旧版配置系统会被忽略。
5. 迁移建议
| 场景 | 选择文件 | 操作步骤 |
|---|---|---|
| 新项目 | eslint.config.mjs |
直接使用新版扁平化配置。 |
| 旧项目升级 | 逐步迁移到 eslint.config.mjs |
运行 npx eslint --init 生成新配置。 |
| CommonJS 项目 | .eslintrc.cjs |
保持旧配置,避免模块冲突。 |
总结表
| 特性 | .eslintrc.cjs |
eslint.config.mjs |
|---|---|---|
| 配置系统 | 旧版层级配置 | 新版扁平化配置 |
| 模块类型 | CommonJS | ES Module (ESM) |
| 语法 | 导出对象 | 导出数组 |
| 文件扩展名 | .cjs |
.mjs(或 ESM .js) |
| 适用场景 | 旧项目、CommonJS 环境 | 新项目、ESM 环境 |
如果需要兼容旧版 ESLint 或使用 CommonJS,选择 .eslintrc.cjs;如果是新项目或希望使用现代 ESM 模块,选择 eslint.config.mjs。










