/* eslint-env node */ module.exports = { root: true, env: { browser: true, node: true, es2022: true }, extends: [ 'eslint:recommended', '@vue/eslint-config-prettier', 'plugin:vue/vue3-essential' ], parserOptions: { ecmaVersion: 2022, sourceType: 'module' }, plugins: ['vue'], rules: { // Vue 特定规则 'vue/multi-word-component-names': 'off', 'vue/no-unused-vars': 'error', 'vue/no-unused-components': 'warn', 'vue/require-default-prop': 'off', 'vue/require-prop-types': 'off', 'vue/no-mutating-props': 'error', 'vue/no-v-html': 'warn', // JavaScript 规则 'no-unused-vars': 'error', 'no-undef': 'error', 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', 'no-alert': 'warn', 'no-var': 'error', 'prefer-const': 'error', 'prefer-arrow-callback': 'error', 'arrow-spacing': 'error', 'comma-dangle': ['error', 'never'], 'quotes': ['error', 'single'], 'semi': ['error', 'never'], 'indent': ['error', 2], 'space-before-function-paren': ['error', 'always'], 'keyword-spacing': 'error', 'object-curly-spacing': ['error', 'always'], 'array-bracket-spacing': ['error', 'never'], // 代码质量 'no-duplicate-imports': 'error', 'no-self-compare': 'error', 'no-unmodified-loop-condition': 'error', 'no-unreachable-loop': 'error', 'no-unused-expressions': 'error', 'no-useless-call': 'error', 'no-useless-concat': 'error', 'no-useless-return': 'error', // 最佳实践 'eqeqeq': ['error', 'always'], 'no-eval': 'error', 'no-implied-eval': 'error', 'no-new-func': 'error', 'no-script-url': 'error', 'no-alert': 'error', 'no-confirm': 'error', 'no-proto': 'error', 'no-return-assign': 'error', 'no-throw-literal': 'error', 'no-useless-return': 'error', 'prefer-promise-reject-errors': 'error', 'radix': 'error', 'require-await': 'error', 'yoda': 'error' }, overrides: [ { files: ['*.config.js', 'vite.config.js'], env: { node: true } } ] }