ESLint与Prettier配置详解
1. 分工界定
1.1 ESLint的职责
- 代码质量问题:
- 发现并修复潜在的运行时错误
- 检查未使用的变量和函数
- 确保函数调用前已定义
- 防止无限循环等逻辑错误
- 检查最佳实践和设计模式
javascript
// ESLint关注的问题示例
// 1. 未使用的变量
const unused = 'test'; // ESLint会警告
// 2. 潜在错误
const obj = null;
console.log(obj.name); // ESLint会警告可能的空指针
// 3. 最佳实践
if (condition = true) { } // ESLint会警告赋值操作
1.2 Prettier的职责
- 代码风格问题:
- 统一代码格式
- 处理行长度
- 处理引号样式
- 处理缩进
- 处理空格和换行
javascript
// Prettier关注的格式问题
// 1. 长行格式化
const longString = "这是一个非常长的字符串,Prettier会自动帮我们换行并保持适当的缩进";
// 2. 对象格式化
const user = {
name: "John",
age: 30,
address: "Street"
};
// 3. 函数调用格式化
someFunction(
longArgument1,
longArgument2,
longArgument3
);
2. 规则冲突解决方案
2.1 标准配置方案
javascript
// .eslintrc.js
module.exports = {
extends: [
'eslint:recommended',
'plugin:prettier/recommended' // 关键配置
],
rules: {
// 这里的规则会覆盖extends中的规则
}
}
// .prettierrc
{
"semi": true,
"singleQuote": false,
"tabWidth": 2
}
2.2 冲突处理原则
优先级处理:
- Prettier的格式化规则优先
- ESLint负责代码质量检查
- 使用eslint-config-prettier禁用冲突规则
配置文件分离:
- .eslintrc专注于代码质量规则
- .prettierrc专注于代码格式规则
- 避免规则重叠
3. 团队协作处理
3.1 强制性配置
json
// package.json
{
"scripts": {
"lint": "eslint --fix .",
"format": "prettier --write .",
"prepare": "husky install"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
]
}
}
3.2 处理个人偏好问题
针对"单引号vs双引号"等争议
制定明确的团队规范:
- 在项目初期确定规范
- 编写详细的规范文档
- 说明规范的原因和好处
自动化工具强制执行:
- 使用husky设置git hooks
- 使用lint-staged在提交前自动格式化
- CI/CD流程中加入检查
配置IDE插件:
json
// .vscode/settings.json
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
- 处理异议的方法:
- 解释统一规范的必要性
- 提供具体的业务场景说明
- 展示规范带来的团队效益
- 允许在特定文件中使用特例规则
4. 最佳实践建议
4.1 渐进式适配
javascript
// .eslintrc.js
module.exports = {
rules: {
// 可以先设置为warning,逐步迁移到error
'quotes': ['warn', 'double'],
'semi': ['warn', 'always']
}
}
4.2 规则定制化
javascript
// 针对不同类型文件使用不同规则
module.exports = {
overrides: [
{
files: ['*.test.js'],
rules: {
// 测试文件的特殊规则
'max-lines': 'off'
}
}
]
}
4.3 文档化
markdown
# 项目代码规范
## 为什么选择这些规则?
- 双引号:与HTML保持一致,避免转义
- 分号:避免ASI带来的问题
- 缩进:提高代码可读性
## 如何执行?
1. 安装依赖
2. 配置编辑器
3. 执行lint命令
## 常见问题解决
...
5. 实际项目经验
渐进式推进:
- 先在新项目中应用
- 旧项目逐模块迁移
- 设置合理的过渡期
团队培训:
- 举办规范说明会
- 提供配置文档
- 建立问题反馈机制
持续优化:
- 定期收集团队反馈
- 及时调整不合理规则
- 更新规范文档