eslint与prettier冲突的根本原因是规则重叠,须通过安装eslint-config-prettier禁用eslint中所有格式类规则,并在vscode中明确指定prettier为默认格式化器,同时确保volar替代vetur以避免类型系统紊乱。

ESLint 和 Prettier 冲突是 VSCode 中最常被误认为“规则不起作用”的真实原因——不是没生效,而是它们在互相覆盖。
eslint-config-prettier 必须启用,否则所有格式化规则都在打架
eslint-config-prettier 的作用不是加新规则,而是关掉所有和 Prettier 冲突的 ESLint 格式类规则(比如 indent、quotes、semi)。不加它,VSCode 就会一边用 ESLint 插件删分号,一边用 Prettier 加分号,保存时反复横跳。
- 在项目中运行:
npm install eslint-config-prettier --save-dev
- 确保
.eslintrc.js的extends数组里包含"prettier"(注意:必须放在最后) - 检查是否遗漏了
"plugin:prettier/recommended"—— 它负责把 Prettier 当作 ESLint 的“报告器”,而不是独立格式化工具
如果仍无效,打开命令面板(Ctrl+Shift+P),执行 Developer: Toggle Developer Tools,在 Console 里搜 ESLint,看是否有 Configuration for rule "xxx" is invalid 报错——常见于旧版 eslint-plugin-prettier 与 ESLint v9 不兼容。
editor.defaultFormatter 只能设一个,且必须匹配语言模式
VSCode 不允许 JavaScript 文件同时由 esbenp.prettier-vscode 和 dbaeumer.vscode-eslint 格式化。你设了两个,它就随机选一个,或干脆不触发。
- 打开设置 JSON(
Ctrl+Shift+P→Preferences: Open Settings (JSON)) - 明确指定:
"editor.defaultFormatter": "dbaeumer.vscode-eslint"
- 同时确保:
"editor.formatOnSave": true,"eslint.format.enable": true
- 关闭 Prettier 扩展对 JS/TS 的接管:
"prettier.disableLanguages": ["javascript","typescript","javascriptreact","typescriptreact"]
别信“两个都留着更保险”——实际效果是保存时卡顿、光标乱跳、修复后又报错。
多个 linter 共存时,python.linting.enabled 不等于“全部启动”
Python 场景下,pylint、flake8、pycodestyle 同时启用,不是增强检查,而是制造重复警告和 CPU 占用飙升。
- 只保留一个主 linter:
"python.linting.pylintEnabled": true,"python.linting.flake8Enabled": false,"python.linting.pycodestyleEnabled": false
- 若用
pylint,记得配好路径:"python.linting.pylintArgs": ["--init-hook", "import sys; sys.path.append('./src')"],否则E0401: Unable to import会满屏飘 - 禁用语言服务级冲突:确认没同时启用 Microsoft Python 扩展和 Pylance 的“双重语义分析”——Pylance 已内置类型检查,再开 Python 扩展的 linting 就是冗余
真正容易被忽略的点:VSCode 的规则冲突从不报错,只表现为“看起来没反应”。它不会弹窗说“Prettier 和 ESLint 冲突了”,只会默默放弃格式化、或让错误提示时有时无。你得自己进 Developer Tools 看日志,或者临时禁用一半插件来二分排查。











