VSCode本身不检测修复Node.js代码格式,真正执行的是项目本地的eslint和prettier CLI工具;必须安装在devDependencies中,通过npx验证版本,并配置eslint-plugin-prettier与eslint-config-prettier消除规则冲突,同时启用editor.codeActionsOnSave中的source.fixAll.eslint,禁用editor.formatOnSave以避免覆盖语义修复。

VSCode 本身不检测也不修复 Node.js 代码格式,真正干活的是你项目里的 eslint 和 prettier CLI 工具——配置错执行主体,保存后就只会“看起来开了,实际没动”。
确认项目级工具链是否就位
VSCode 插件只是调度器,eslint 和 prettier 必须装在项目本地(devDependencies),否则插件找不到可执行命令。
- 运行
npx eslint --version和npx prettier --version,能输出版本号才算就位 - 检查
package.json中devDependencies是否含eslint、prettier、eslint-config-prettier、eslint-plugin-prettier - 多根工作区(multi-root workspace)下,每个子文件夹必须自带
.eslintrc.cjs或.eslintrc.js,插件不会跨文件夹继承配置 - 若
.eslintrc.cjs里写了"extends": ["prettier"]却没装eslint-config-prettier,ESLint 会静默跳过整个配置,不报错也不生效
vscode/settings.json 中只留关键三项
开一堆开关反而导致冲突,“自动修复”失效的主因就是配置冗余或职责错位。
- 关掉
"editor.formatOnSave":否则prettier会无脑重排,覆盖eslint的语义修复(比如把var改成const) - 启用
"editor.codeActionsOnSave": { "source.fixAll.eslint": true }:这是 ESLint 自动修复的唯一有效入口(eslint.autoFixOnSave已废弃) - 设
"eslint.format.enable": true:让 ESLint 接管 JS/TS 文件的格式化请求(注意:它只在有可修复规则时才介入,不是全量重排)
避免 eslint 和 prettier 规则打架
两者同时启用却没划清边界,就会出现“保存一次,引号变双、再保存又变单”的循环拉扯。
- 不要让 ESLint 管格式:在
.eslintrc.cjs中显式关闭所有格式类规则,例如"semi": "off"、"quotes": "off"、"comma-dangle": "off" - 用
eslint-plugin-prettier把 Prettier 规则转成 ESLint 可识别的警告,再靠eslint-config-prettier关闭 ESLint 内置的重复规则 - 最终效果是:ESLint 负责逻辑与可修复风格(如
no-console不修复,但semi会加;no-unused-vars在部分场景下也能删变量),Prettier 负责纯格式落地(空格、换行、缩进)
为什么改完保存还是没反应?重点查这三处
最常被忽略的不是配置项写没写,而是执行上下文断了。
- VSCode 底部状态栏右下角是否显示 “ESLinter: Ready”?没显示说明插件没连上项目里的
node_modules/.bin/eslint - 打开开发者工具(
Ctrl+Shift+P→Developer: Toggle Developer Tools),Console 里有没有Cannot find module 'eslint'或ESLint server stopped - 当前打开的文件是否属于已加载的文件夹?如果只是单独打开一个
.js文件(没以文件夹形式打开项目),ESLint 插件默认不激活
真正卡住的地方往往不是“要不要开某个开关”,而是 eslint 进程根本没跑起来——它依赖 Node 环境、本地依赖、配置文件路径、工作区范围四者对齐。少一环,保存就只是保存。


















