import globals from 'globals'; import pluginJs from '@eslint/js'; import tseslint from 'typescript-eslint'; import pluginVue from 'eslint-plugin-vue'; import vueParser from 'vue-eslint-parser'; import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; /** @type {import('eslint').Linter.Config[]} */ export default [ { // ignores: ['**/node_modules', '**/dist', '*/*/types', '.gitignore', '.npmrc', '.DS_Store'] ignores: ['**/*'] }, // {languageOptions: { globals: {...globals.browser, ...globals.node} }}, /** js推荐配置 */ pluginJs.configs.recommended, /** ts推荐配置 */ ...tseslint.configs.recommended, /** vue推荐配置 */ ...pluginVue.configs['flat/essential'], /** prettier 配置 */ eslintPluginPrettierRecommended, /** javascript 规则 */ { files: ['**/*.{js,mjs,cjs,ts,vue,jsx,tsx}'], rules: { // 对象结尾逗号 'comma-dangle': 'off', // 关闭未定义变量 'no-undef': 'off', // 确保 Prettier 的行为不会被 ESLint 覆盖 quotes: ['error', 'single', { allowTemplateLiterals: true }], // 关闭对未定义变量的警告 'no-undefined': 'off', //不使用的变量不报错 'no-unused-vars': 'off', // 禁止使用不规范的空格 'no-irregular-whitespace': 'off', // 函数括号前的空格 'space-before-function-paren': 0, // 箭头函数的空格 'arrow-spacing': [ 2, { before: true, after: true } ], // 代码块的空格 'block-spacing': [2, 'always'], // 大括号风格 'brace-style': [ 2, '1tbs', { allowSingleLine: true } ], // 对象属性换行 'object-property-newline': 'off', // JSX 引号风格 <'prefer-double', 'prefer-single'> 'jsx-quotes': [2, 'prefer-double'], // 对象键值对之间的空格 'key-spacing': [ 2, { beforeColon: false, afterColon: true } ], // 关键字之间的空格 'keyword-spacing': [ 2, { before: true, after: true } ], // 构造函数首字母大写 'new-cap': [ 2, { newIsCap: true, capIsNew: false } ], // new 操作符使用时需要括号 'new-parens': 2, // 禁止使用 Array 构造函数 'no-array-constructor': 2, // 禁止调用 caller 和 callee 'no-caller': 2, // 禁止重新分配类名 'no-class-assign': 2, // 禁止条件中的赋值操作 'no-cond-assign': 2, // 禁止 const 重新分配 'no-const-assign': 2, // 正则表达式中的控制字符 'no-control-regex': 0, // 禁止删除变量 'no-delete-var': 2, // 禁止在函数参数中使用重复名称 'no-dupe-args': 2, // 禁止在类中使用重复名称的成员 'no-dupe-class-members': 2, // 禁止在对象字面量中使用重复的键 'no-dupe-keys': 2, // 禁止重复的 case 标签 'no-duplicate-case': 2, // 禁止空的字符类 'no-empty-character-class': 2, // 禁止空的解构模式 'no-empty-pattern': 2, // 禁止使用 eval 'no-eval': 2, // 不允许出现空的代码块 'no-empty': 2, // 禁止不必要的布尔转换 'no-extra-boolean-cast': 2, // 禁止不必要的括号 'no-extra-parens': [2, 'functions'], // 禁止 case 语句落空 'no-fallthrough': 2, // 禁止在数字后面添加小数点 'no-floating-decimal': 2, // 禁止对函数声明重新赋值 'no-func-assign': 2, // 禁止出现歧义多行表达式 'no-unexpected-multiline': 2, // 禁止不需要的转义 'no-useless-escape': 0, // 数组的括号前后的间距 'array-bracket-spacing': [2, 'never'] } }, /** vue 规则 */ { files: ['**/*.vue'], languageOptions: { parser: vueParser, globals: { ...globals.browser, ...globals.node }, parserOptions: { /** typescript项目需要用到这个 */ parser: tseslint.parser, ecmaVersion: 'latest', /** 允许在.vue 文件中使用 JSX */ ecmaFeatures: { jsx: true } } }, rules: { 'vue/component-definition-name-casing': 'off', 'vue/singleline-html-element-content-newline': ['off'], 'vue/no-mutating-props': [ 'error', { shallowOnly: true } ], // 要求组件名称始终为 “-” 链接的单词 'vue/multi-word-component-names': 'off', // 关闭 index.html 文件报 clear 错误 'vue/comment-directive': 'off', // 关闭对 defineProps 的有效性检查 'vue/valid-define-props': 'off', // 允许在一个文件中定义多个组件 'vue/one-component-per-file': 'off', // 关闭 Prop 类型要求的警告 'vue/require-prop-types': 'off', // 关闭属性顺序要求 'vue/attributes-order': 'off', // 关闭对默认 Prop 的要求 'vue/require-default-prop': 'off', // 关闭连字符命名检验 'vue/attribute-hyphenation': 'off', // 关闭自闭合标签的要求 'vue/html-self-closing': 'off', // 禁止在关闭的括号前有换行 'vue/html-closing-bracket-newline': 'off', // 允许使用 v-html 指令 'vue/no-v-html': 'off' } }, { /** * "off" 或 0 ==> 关闭规则 * "warn" 或 1 ==> 打开的规则作为警告(不影响代码执行) * "error" 或 2 ==> 规则作为一个错误(代码不能执行,界面报错) */ rules: { // eslint (http://eslint.cn/docs/rules) // 'no-var': 'error', // 要求使用 let 或 const 而不是 var // 'no-multiple-empty-lines': ['error', { max: 1 }], // 不允许多个空行 // 'prefer-const': 'off', // 使用 let 关键字声明但在初始分配后从未重新分配的变量,要求使用 const // 'no-use-before-define': 'off', // 禁止在 函数/类/变量 定义之前使用它们 // typeScript (https://typescript-eslint.io/rules) // '@typescript-eslint/no-unused-vars': 'error', // 禁止定义未使用的变量 // '@typescript-eslint/prefer-ts-expect-error': 'error', // 禁止使用 @ts-ignore // '@typescript-eslint/ban-ts-comment': 'error', // 禁止 @ts- 使用注释或要求在指令后进行描述 // '@typescript-eslint/no-inferrable-types': 'off', // 可以轻松推断的显式类型可能会增加不必要的冗长 // '@typescript-eslint/no-namespace': 'off', // 禁止使用自定义 TypeScript 模块和命名空间 '@typescript-eslint/no-explicit-any': 'off' // 禁止使用 any 类型 // '@typescript-eslint/ban-types': 'off', // 禁止使用特定类型 // '@typescript-eslint/no-var-requires': 'off', // 允许使用 require() 函数导入模块 // '@typescript-eslint/no-empty-function': 'off', // 禁止空函数 // '@typescript-eslint/no-non-null-assertion': 'off', // 不允许使用后缀运算符的非空断言(!) // vue (https://eslint.vuejs.org/rules) // 'vue/script-setup-uses-vars': 'error', // 防止