eslint-plugin-perfectionist 中 TypeScript 非相对导入的分组优化
在 TypeScript 项目中,我们通常会使用两种导入方式:相对导入和非相对导入。相对导入以./或../开头,而非相对导入则直接引用模块名。eslint-plugin-perfectionist 的sort-imports规则现在可以更智能地区分这两种导入方式,特别是针对基于baseUrl配置的非相对导入。
背景与问题
TypeScript 支持通过tsconfig.json中的baseUrl配置来设置非相对导入的基准路径。例如,当baseUrl设置为src时,我们可以使用import x from 'components/Button'而不是import x from '../../components/Button'。
然而,在之前的版本中,eslint-plugin-perfectionist 将所有非相对导入都归类为"external"(外部)导入组,这会导致项目内部的非相对导入与真正的第三方库导入混在一起,不符合许多开发者的代码组织习惯。
解决方案
新版本引入了"ts-non-relative-imports"这一特殊分组,专门用于识别基于baseUrl配置的项目内部非相对导入。实现这一功能需要:
- 自动检测最近的
tsconfig.json文件 - 解析其中的
baseUrl和paths配置 - 根据这些配置判断导入语句是否属于项目内部
为了优化性能,实现采用了与typescript-eslint类似的缓存机制,确保每个目录的tsconfig.json只被读取一次,避免重复解析带来的性能损耗。
使用建议
现在开发者可以更灵活地配置导入分组顺序。例如,可以将"ts-non-relative-imports"与"parent"、"sibling"等相对导入分组合并,使项目内部的导入保持在一起,而将真正的第三方库导入单独分组。
这种分组方式不仅使代码更整洁,还能帮助开发者快速区分项目内部模块和外部依赖,提高代码可读性和维护性。
技术细节
实现过程中考虑了TypeScript的各种配置情况,包括:
- 基本的
baseUrl配置 - 复杂的
paths路径映射 - 继承的
extends配置 - 多
tsconfig.json文件的场景
通过智能缓存和高效的文件查找算法,确保了这一功能在大型项目中的良好性能表现。
这一改进使得eslint-plugin-perfectionist在TypeScript项目中的导入排序更加精确和实用,是TypeScript开发者提升代码质量的又一有力工具。
kernelopenEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。C0115
let_datasetLET数据集 基于全尺寸人形机器人 Kuavo 4 Pro 采集,涵盖多场景、多类型操作的真实世界多任务数据。面向机器人操作、移动与交互任务,支持真实环境下的可扩展机器人学习00
mindquantumMindQuantum is a general software library supporting the development of applications for quantum computation.Python059
PaddleOCR-VLPaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型,可实现精准的元素识别。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00