0
点赞
收藏
分享

微信扫一扫

eslintrc.cjs和eslint.config.mjs有什么区别

ESLint 的 eslintrc.cjseslint.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 模块(必须使用 .mjstype: "module".js)。
    • 配置通过 export default 导出一个数组,允许多个配置叠加。
    • 扁平化设计,无层级优先级,更易维护。

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

举报

相关推荐

0 条评论