ESLint如何通过eslint-plugin-import实现导入成员排序
ESLint导入成员排序无冲突配置方案
你的核心诉求是对单个导入语句花括号内的命名成员做字母序校验+自动修复,同时不与现有eslint-plugin-import的跨导入语句排序规则冲突,可直接采用以下零额外依赖的方案:
具体实现方案
eslint-plugin-import目前没有内置花括号内成员排序的对应规则,不需要额外引入替代插件,只要关闭原生排序规则里和插件逻辑重叠的配置项即可,两者管控范围完全不重叠,不会出现冲突:
eslint-plugin-import/order负责管控:不同导入语句块之间的排序,按照你配置的["builtin", "external", "parent", "sibling", "index"]优先级按模块类型排序- 裁剪后的
sort-imports(即你提到的带memberSyntaxSortOrder逻辑的排序规则)负责管控:单个导入语句花括号内部的命名成员排序,自动把乱序的成员调整为字母序
直接将以下配置复制到ESLint配置文件对应位置即可:
{ "rules": { // 保留你原有的eslint-plugin-import排序配置,不需要做任何修改 "import/order": ["error", { "groups": ["builtin", "external", "parent", "sibling", "index"], // 你原来的其他import/order配置(比如newlines-between、pathGroups等)保持原有写法即可 }], // 配置原生排序规则,关闭冲突逻辑 "sort-imports": ["error", { "ignoreDeclarationSort": true, // 核心配置:关闭跨导入语句的排序逻辑,这部分完全交给import/order处理 "ignoreMemberSort": false, // 开启花括号内命名成员的排序检查 "memberSyntaxSortOrder": ["none", "all", "multiple", "single"], // 由于已经关闭声明排序,该配置不会生效,保留默认值即可 }] } }
适配说明
- 如果项目使用TypeScript,将上述配置中的
sort-imports替换为@typescript-eslint/sort-imports,配置项完全一致,可避免TS语法解析异常 - 配置生效后,会自动检测
import { b, a, c } from 'foo.js'这类乱序写法,执行eslint --fix时会自动修复为import { a, b, c } from 'foo.js'的规范格式 - 该配置不会改动你现有导入语句的整体排序逻辑,不会出现两个规则互相冲突、反复修改代码的问题
内容的提问来源于stack exchange,提问作者Thanh-Quy Nguyen
相关产品推荐
相关产品推荐

