import js from "@eslint/js"; import ts from "typescript-eslint"; import prettier from "eslint-config-prettier"; import prettierPlugin from "eslint-plugin-prettier"; import globals from "globals"; import importPlugin from "eslint-plugin-import-x"; import vuePlugin from "eslint-plugin-vue"; import vueParser from "vue-eslint-parser"; export default [ // 应用推荐规则 js.configs.recommended, ...ts.configs.recommended, ...vuePlugin.configs["flat/recommended"], prettier, // 基础配置 { files: ["**/*.{js,mjs,cjs,ts,vue}"], ignores: [ "**/node_modules/*", "**/dist/*", "build/", "public/", "docs/", "bin/", "pnpm-lock.yaml", ".vscode/", ".idea/", ".husky/", "Dockerfile", ".hbuilderx/", ".vite/", "uni_modules/", "libs/", "static/", "patches/", "wxcomponents/", "lib/", "scripts/", ], plugins: { prettier: prettierPlugin, "import-x": importPlugin }, languageOptions: { globals: { ...globals.node, ...globals.browser, }, ecmaVersion: "latest", sourceType: "module", parser: vueParser, parserOptions: { parser: ts.parser, ecmaFeatures: { impliedStrict: true, }, extraFileExtensions: [".vue"], }, }, settings: { "import-x/resolver": { typescript: { project: [ "packages/common/tsconfig.json", "packages/uni-app/tsconfig.json", "packages/uview-plus/tsconfig.json", "packages/vue2/tsconfig.json", "packages/vue3/tsconfig.json", "playground/vue3-app/tsconfig.json", "playground/vue2-app/tsconfig.json", "playground/uniapp-app/tsconfig.json", ], }, node: true, }, }, rules: { ...importPlugin.flatConfigs.recommended.rules, // Prettier 规则 "prettier/prettier": "warn", "no-console": process.env.NODE_ENV === "production" ? "warn" : "off", "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", // Import 规则 "import-x/no-self-import": "error", "import-x/no-cycle": "error", "import-x/no-useless-path-segments": "error", "import-x/no-extraneous-dependencies": "error", "import-x/no-mutable-exports": "error", "import-x/no-named-as-default": "error", "import-x/no-named-as-default-member": "error", "import-x/no-duplicates": "warn", "import-x/no-deprecated": "warn", "import-x/newline-after-import": "warn", "import-x/first": "warn", "import-x/order": [ "warn", { groups: [ "builtin", "external", "internal", "parent", "sibling", "index", "object", "type", ], alphabetize: { order: "asc", }, }, ], }, }, // 测试文件覆盖配置 { files: ["**/__tests__/*.{j,t}s?(x)", "**/tests/unit/**/*.spec.{j,t}s?(x)"], languageOptions: { globals: { ...globals.mocha, ...globals.jest, }, }, }, // uni-app / App-Plus 运行时全局变量 { files: [ "packages/uni-app/**/*.{js,ts,vue}", "packages/common/src/printer/**/*.{js,ts}", "playground/uniapp-app/**/*.{js,ts,vue}", ], languageOptions: { globals: { uni: "readonly", plus: "readonly", wx: "readonly", getCurrentPages: "readonly", }, }, }, // playground 项目放宽部分规则 { files: ["playground/**/*.{js,ts,vue}"], rules: { "import-x/no-extraneous-dependencies": "off", "vue/multi-word-component-names": "off", }, }, ];