standard规范本身不自带自动修复能力,需手动配置editor.codeactionsonsave并启用eslint的--fix功能,且仅支持semi、quotes等标有✅fixable的规则自动修复。

必须手动配置 editor.codeActionsOnSave,且 Standard 规范本身不自带自动修复能力——得靠 ESLint 的 --fix 能力 + 正确启用规则才生效。
Standard 规范要能自动修复,先确认它是否真被加载
Standard 是一个预设规则集(eslint-config-standard),它本身不决定“能不能修”,而是由它启用的具体规则是否标有 ✅ Fixable 决定。比如 semi、quotes、comma-dangle 在 Standard 中默认开启且可修复;但 no-console 虽然也在 Standard 里,却不可自动修复。
- 运行
npx eslint --print-config src/index.js(替换为你任一 JS 文件路径),检查输出中semi、quotes等规则值是否为["error", "always"]或类似数组形式——只有这种写法才保留 fix 能力;若写成"error"字符串,部分版本会禁用修复 - 确保你装的是
eslint-config-standard及其 peer deps:eslint、eslint-plugin-import、eslint-plugin-node、eslint-plugin-promise,缺一个都可能导致规则没加载 - 如果用
eslint.config.js(Flat Config 新格式),需确认导出对象中extends: ['standard']且 ESLint 版本 ≥ 8.56.0
editor.codeActionsOnSave 必须精确配置,不能只开 source.fixAll
开 "source.fixAll": true 会让 VSCode 尝试调所有已注册的 linter(比如 Prettier、Stylelint),极易冲突;Standard 用户常因此发现引号被反复切换、分号时有时无。
- 只加这一行到
settings.json(工作区或用户级):"editor.codeActionsOnSave": { "source.fixAll.eslint": true } - 别同时设
"source.formatDocument": true或"source.organizeImports": true——Standard 不管 import 排序,这两项和eslint-plugin-import的规则容易打架 - 如果你用的是 Vue 或 TS,
eslint.validate必须显式包含对应语言:"eslint.validate": ["javascript", "typescript", "vue"]
Standard + TypeScript/Vue 场景下修复失效的典型原因
Standard 默认只处理 .js,对 .ts 和 .vue 文件“视而不见”,即使你写了 extends: ['standard', 'standard-typescript'],VSCode 插件也不会自动识别,除非你告诉它“这些文件也要交给 ESLint”。
- 在
settings.json中补全:"eslint.options": { "extensions": [".js", ".ts", ".jsx", ".tsx", ".vue"] } - TypeScript 必须配
parser: '@typescript-eslint/parser'和plugins: ['@typescript-eslint'],否则no-unused-vars这类规则根本不会触发(更别说修复) - Vue 单文件组件里 JS 部分,默认语言模式要是
Vue(右下角显示),且eslint.validate里要有"vue";否则 ESLint 直接跳过整个<script></script>块
为什么保存后还是没反应?优先查这三处
90% 的“不修复”问题,不是规则写错了,而是 ESLint 根本没跑起来。VSCode 插件只是个壳,真正干活的是你项目里的 node_modules/.bin/eslint。
- 打开命令面板(
Ctrl+Shift+P),运行ESLint: Show Output Channel,看有没有Cannot find module 'eslint'或No ESLint configuration found—— 这比翻 settings.json 快十倍 - 确认当前 VSCode 工作区是项目根目录(即
.eslintrc.js或package.json所在文件夹),不是子文件夹;Monorepo 里尤其容易开错路径 - 检查右下角语言模式:.ts 文件显示
TypeScript,不是Plain Text;.vue 文件显示Vue,不是HTML—— 否则eslint.validate判定为不匹配,直接跳过
Standard 的修复边界很清晰:它只动语法层面可推断的部分(空格、分号、引号、尾逗号),不碰逻辑、不重命名变量、不补 defaultProps。想让它修更多,得加插件如 eslint-plugin-unused-imports,但那就超出 Standard 本身了。











