const def = (enable, currentValue, restValue) => { const defaultValueMap = { Object: {}, Array: [], Function: () => {}, }; let defaultValue; try { defaultValue = restValue === undefined ? defaultValueMap[currentValue.constructor.name] : restValue; } catch (error) {} return [1, true].includes(enable) ? currentValue : defaultValue; }; const extendFileName = ".eslintrc.rules.js"; const getExtendRules = () => { try { const pkg = path.join(__dirname, extendFileName); require.resolve(pkg); // eslint-disable-next-line global-require return require(`{pkg}`); } catch (e) {} return {}; }; module.exports = { root: true, env: { browser: true, node: true, }, extends: [ /* 引入 eslint-config-airbnb-base 规则 */ "airbnb-base", "@nuxtjs", "@nuxtjs/eslint-config-typescript", "prettier", "plugin:@typescript-eslint/recommended", "plugin:@typescript-eslint/eslint-recommended", "plugin:prettier/recommended", "plugin:nuxt/recommended", // 去掉 "plugin:playwright/jest-playwright", 而使用 playwright-test 方式进行测试 "plugin:playwright/playwright-test", ], plugins: ["prettier"], // add your custom rules here rules: { // eslint 对eslint 内置规则的定制 ...def(1, { "no-underscore-dangle": [0], "func-names": [0], "promise/param-names": [0], }), ...def(1, { "vue/no-v-model-argument": ["warn"], "vue/no-mutating-props": ["warn"], "vue/no-v-for-template-key-on-child": [0], "vue/no-v-for-template-key": [0], "vue/multi-word-component-names": ["warn"], }), ...def(1, { "import/extensions": [0], "import/no-extraneous-dependencies": [0], "import/no-unresolved": [0], }), // prettier/prettier 对prettier规则的定制 ...def(1, { "prettier/prettier": [ "error", { // 使用 2 个空格缩进 tabWidth: 2, // 不使用缩进符,而使用空格 useTabs: false, // 行尾需要有分号 semi: true, // 不使用单引号 singleQuote: false, // 对象的 key 仅在必要时用引号 quoteProps: "as-needed", // jsx 不使用单引号,而使用双引号 jsxSingleQuote: false, // 末尾不需要逗号 trailingComma: "es5", // 大括号内的首尾需要空格 bracketSpacing: true, // jsx 标签的反尖括号需要换行 jsxBracketSameLine: true, // 箭头函数,只有一个参数的时候,也需要括号 arrowParens: "always", // 每个文件格式化的范围是文件的全部内容 rangeStart: 0, rangeEnd: Infinity, // 不需要写文件开头的 @prettier requirePragma: false, // 不需要自动在文件开头插入 @prettier insertPragma: false, // 使用默认的折行标准 proseWrap: "preserve", // 根据显示样式决定 html 要不要折行 htmlWhitespaceSensitivity: "css", // 换行符使用 lf endOfLine: "lf", }, { usePrettierrc: false, }, ], }), // @typescript-eslint ...def(1, { "@typescript-eslint/no-var-requires": [0], "@typescript-eslint/no-empty-function": [0], "@typescript-eslint/no-explicit-any": [0], "@typescript-eslint/no-unused-vars": [0], "@typescript-eslint/explicit-module-boundary-types": [0], }), ...def(1, getExtendRules()), }, };