ESLint规则冲突导致技术债务增加该怎么平衡?
最近团队统一了ESLint配置,但发现某些规则在紧急迭代时特别影响效率。比如必须用立即执行函数包裹组件逻辑,但快速修Bug时总想直接导出函数。
试过把规则设为warn,但同事说这样失去规范意义。现在每周代码审查都要反复沟通,技术债务反而在积累。有没有更好的处理方式?
// 当前冲突示例
// 要求写成
(() => {
export default function MyComponent() {}
})();
// 但开发想写成
export default function MyComponent() {}
现在考虑把规范拆分成基础规则和完整规则,日常用基础版快速开发,发版前再跑完整检查。这样可行吗?或者有没有其他平衡方案?
你们提到的拆分基础规则和完整规则的思路是对的,但我们当时试过,发现执行起来不够灵活。后来我们是这么处理的:
1. **分环境配置**:开发环境用基础规则,CI/CD流水线用完整规则。
- 开发时只报error级别问题,warn级别不打断开发流程
- 构建阶段开启所有规则,不符合直接失败
2. **按文件类型应用不同规则集**:
3. **配合Prettier做自动修复**:
- 安装
eslint-config-prettier禁用冲突规则- 开发时开保存自动fix,至少保证格式统一
- 减少因为格式问题产生的争议
4. **逐步收敛技术债**:
- 每次修bug时,如果改动区域有eslint warn,强制顺手修复
- 用 todo 注释标记遗留问题,比如:
最后建议你们开一次团队会议,把当前规则按影响程度打标签(比如:维护成本、理解成本、错误预防),然后优先保留能防止常见错误的规则。比如
no-unused-vars就比「必须立即执行函数包裹」有价值得多。别忘了在项目根目录加个
.eslintignore,临时把历史包袱文件排除,给团队一个渐进式改进的空间。可以参考我们团队的做法,分成三层规则:
1. **基础规则**:只管最基本的问题,比如语法错误、明显的潜在bug。这部分在日常开发中启用,保证效率。
2. **推荐规则**:一些稍微严格但不过分的规范,比如变量命名、代码风格等。这些可以在本地提交前运行,用
--fix自动修正。3. **完整规则**:像你提到的立即执行函数包裹这种强规范,放到 CI 阶段检查。平时不用纠结,发版前自然会强制对齐。
具体实现可以用不同的配置文件:
然后在 package.json 里定义脚本:
这样平时跑
lint:dev,CI 跑lint:ci,既不影响开发节奏,又能保证代码质量。同事说失去规范意义?不存在的,只要最终进入主分支的代码都符合完整规则就行。最后吐槽一句,那些“必须写成什么样”的规则确实让人头疼,但换个方式管理就好多了。