ESLint的import/order是唯一可靠路径:必须设为"error"、本地安装eslint-plugin-import、启用alphabetize升序、配置source.fixAll.eslint自动修复,并确保文件类型被eslint.validate覆盖。

ESLint 的 import/order 是唯一可靠路径
VSCode 本身不提供“自动按字母重排 import”的原生能力,organizeImports 和 Prettier 都只做分组、删未用项、加空行,不控制字母顺序。真要升序排列,必须靠 ESLint 的 import/order 规则配合修复机制。
常见错误是配了规则但没开修复开关,或规则设成 "warn" —— 这种情况下保存时完全不会触发排序。
-
import/order必须设为"error"(不是"warn") - 项目本地安装
eslint-plugin-import(全局安装无效) -
.eslintrc.js或eslint.config.mjs中启用规则,含alphabetize: { order: "asc", caseInsensitive: true } -
settings.json中必须有"editor.codeActionsOnSave": { "source.fixAll.eslint": true },不能写成source.organizeImports - 检查
eslint.validate是否包含当前文件类型,比如"typescriptreact"需显式列出,否则规则不加载
Python 要用 isort,不是 black 或 VSCode 自带格式化
Python 的 python.sortImports.enabled 已废弃,python.sortImports.args 也失效。VSCode 默认不调 isort,除非你明确指定它为格式化器。
想严格按字母序(不分组),关键在 pyproject.toml 配置:
- 安装
isort>=5.12:pip install isort - 项目根目录放
pyproject.toml,写入:[tool.isort]+force_sort_within_sections = true+lines_after_imports = 2 -
settings.json中设"python.formatting.provider": "isort",并启用"editor.formatOnSave": true - 禁用所有其他格式化配置,如
python.formatting.blackArgs,否则isort会被绕过
别让 VSCode 识别错语言类型,这是 90% 失效的根源
规则再对,如果文件没被识别为对应语言,整个链路就断了。检查右下角状态栏:如果是 Plain Text,就说明 VSCode 根本没走任何语言逻辑,大纲不显示、ESLint 不跑、isort 不触发。
- TypeScript 文件需有有效
tsconfig.json,且parserOptions.project指向它,否则路径解析失败,分组乱,字母序无从谈起 - React 文件(
.tsx)若没在eslint.validate里加"typescriptreact",规则不会生效 - Python 文件右下角显示
Plain Text?点击它,手动选Python;或者确认 Python 扩展已启用、Pylance 正在运行 - JS/TS 文件中存在语法错误(如漏括号、少分号),语言服务器可能提前退出,导致后续 import 不被解析,也就无法排序
别信“插件一键搞定”,多数插件只是包装已有工具
像 Import Sorter 或 simple-import-sort 这类插件,本质还是调用 ESLint 或自定义解析器。它们能简化配置,但绕不开底层依赖。
例如 simple-import-sort 要求 eslint-plugin-simple-import-sort 安装,且 eslint 版本不能高于 v8(v9 不兼容),这类限制容易被忽略。
真正容易被忽略的点是:排序只作用于顶层 import 声明,不处理 require()、动态 import()、或嵌套在函数里的导入 —— 这些根本不在 ESLint import/order 的检查范围内。











