ESLint 与 Prettier
ESLint
安装
bash
npm init @eslint/config
# 或
npm install -D eslint @eslint/jsnpm init @eslint/config
# 或
npm install -D eslint @eslint/js配置示例
js
// eslint.config.js (Flat Config,ESLint 9+)
import js from '@eslint/js'
import ts from 'typescript-eslint'
import vue from 'eslint-plugin-vue'
import prettier from 'eslint-config-prettier'
export default [
js.configs.recommended,
...ts.configs.recommended,
...vue.configs['flat/recommended'],
prettier,
{
rules: {
// 可能的错误
'no-console': process.env. NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env. NODE_ENV === 'production' ? 'error' : 'off',
'no-unused-vars': 'off', // 交给 TypeScript 处理
'prefer-const': 'error',
// TypeScript
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/explicit-function-return-type': 'off',
// Vue
'vue/multi-word-component-names': 'off',
'vue/require-default-prop': 'off',
'vue/max-attributes-per-line': ['warn', { singleline: 3 }],
},
},
{
ignores: ['dist/**', 'node_modules/**', '*.config.js'],
},
]// eslint.config.js (Flat Config,ESLint 9+)
import js from '@eslint/js'
import ts from 'typescript-eslint'
import vue from 'eslint-plugin-vue'
import prettier from 'eslint-config-prettier'
export default [
js.configs.recommended,
...ts.configs.recommended,
...vue.configs['flat/recommended'],
prettier,
{
rules: {
// 可能的错误
'no-console': process.env. NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env. NODE_ENV === 'production' ? 'error' : 'off',
'no-unused-vars': 'off', // 交给 TypeScript 处理
'prefer-const': 'error',
// TypeScript
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/explicit-function-return-type': 'off',
// Vue
'vue/multi-word-component-names': 'off',
'vue/require-default-prop': 'off',
'vue/max-attributes-per-line': ['warn', { singleline: 3 }],
},
},
{
ignores: ['dist/**', 'node_modules/**', '*.config.js'],
},
].eslintrc(传统配置,ESLint 8)
json
{
"env": { "browser": true, "es2022": true, "node": true },
"extends": [
"eslint:recommended",
"plugin:vue/vue3-recommended",
"@vue/typescript/recommended",
"prettier"
],
"parserOptions": { "ecmaVersion": "latest", "sourceType": "module" },
"rules": {
"vue/multi-word-component-names": "off"
}
}{
"env": { "browser": true, "es2022": true, "node": true },
"extends": [
"eslint:recommended",
"plugin:vue/vue3-recommended",
"@vue/typescript/recommended",
"prettier"
],
"parserOptions": { "ecmaVersion": "latest", "sourceType": "module" },
"rules": {
"vue/multi-word-component-names": "off"
}
}常用插件
| 插件 | 作用 |
|---|---|
typescript-eslint | TypeScript 规则 |
eslint-plugin-vue | Vue 3 规则 |
eslint-plugin-react | React 规则 |
eslint-plugin-react-hooks | React Hooks 规则 |
eslint-plugin-import | 导入排序/检查 |
eslint-plugin-unicorn | 更多实用规则 |
eslint-config-prettier | 关闭与 Prettier 冲突的规则 |
Prettier
安装
bash
npm install -D prettier eslint-config-prettiernpm install -D prettier eslint-config-prettier配置
json
// .prettierrc
{
"semi": false,
"singleQuote": true,
"trailingComma": "all",
"printWidth": 100,
"tabWidth": 2,
"useTabs": false,
"arrowParens": "always",
"endOfLine": "lf",
"bracketSpacing": true,
"htmlWhitespaceSensitivity": "css",
"vueIndentScriptAndStyle": false
}// .prettierrc
{
"semi": false,
"singleQuote": true,
"trailingComma": "all",
"printWidth": 100,
"tabWidth": 2,
"useTabs": false,
"arrowParens": "always",
"endOfLine": "lf",
"bracketSpacing": true,
"htmlWhitespaceSensitivity": "css",
"vueIndentScriptAndStyle": false
}忽略文件
# .prettierignore
dist/
node_modules/
pnpm-lock.yaml
CHANGELOG.md# .prettierignore
dist/
node_modules/
pnpm-lock.yaml
CHANGELOG.mdVS Code 自动格式化
json
// .vscode/settings.json
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
}// .vscode/settings.json
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
}ESLint + Prettier 协作流程
开发写入 → ESLint(代码质量) → Prettier(代码格式) → 保存
↓
Git commit → Husky → lint-staged → 只检查暂存文件开发写入 → ESLint(代码质量) → Prettier(代码格式) → 保存
↓
Git commit → Husky → lint-staged → 只检查暂存文件原则: ESLint 负责逻辑正确(不会出错的规则),Prettier 负责风格统一(缩进、引号、分号)。 ESLint 通过 eslint-config-prettier 关闭与 Prettier 重叠的规则。
与 TypeScript 配合
bash
npm install -D typescript-eslintnpm install -D typescript-eslintjs
// eslint.config.js
import ts from 'typescript-eslint'
export default ts.config(
...ts.configs.recommended,
...ts.configs.stylistic,
{
rules: {
'@typescript-eslint/consistent-type-imports': [
'warn',
{ prefer: 'type-imports' },
],
},
},
)// eslint.config.js
import ts from 'typescript-eslint'
export default ts.config(
...ts.configs.recommended,
...ts.configs.stylistic,
{
rules: {
'@typescript-eslint/consistent-type-imports': [
'warn',
{ prefer: 'type-imports' },
],
},
},
)
Cao Note