根本不是习惯问题,而是编辑器配置与规则落地不到位;必须启用editorconfig插件并配置.root=true的.editorconfig文件统一底层格式,配合eslint+prettier协同(通过eslint-config-prettier禁冲突规则)、vs code项目级settings.json强制formatonsave,并用husky+lint-staged在提交前校验,形成“编辑→保存→提交”全链路闭环。

团队协作中 JavaScript 代码风格不一致,根本不是“习惯问题”,而是编辑器没配对、规则没落地。只要插件选得准、配置压得实,保存那一刻就自动统一格式、标出潜在错误——不需要口头提醒,也不依赖个人自觉。
EditorConfig 插件必须启用,且 .editorconfig 要放在项目根目录
它解决的是最底层的“物理格式”问题:缩进用空格还是 tab、换行符是 lf 还是 crlf、文件末尾要不要空行。这些看似琐碎,但一旦混入 Git 提交,就会导致大量无意义的 diff。
-
root = true必须写,否则 VS Code 会继续向上查找父目录的配置,可能意外继承错误规则 - 匹配模式别写太宽,比如
[*.js]比[*]更安全;[lib/**.js]这种通配能精准覆盖子目录 - 如果团队同时写 JS 和 Python,
[*.py]块里设indent_size = 4,[*.js]里设indent_size = 2,避免一刀切 - 注意
end_of_line在 Windows 和 macOS/Linux 上默认不同,统一设为lf可避免 Git 报告大量行尾变更
ESLint + Prettier 组合不能只装插件,关键在 .eslintrc.js 和 .prettierrc 的协同
只装插件但没配置文件,等于买了锅却不点火。ESLint 负责“对不对”,Prettier 负责“好不好看”,两者冲突时必须让 ESLint 让步。
- 务必安装
eslint-config-prettier并加入extends数组,否则quotes、semi等规则会和 Prettier 打架 -
.prettierrc里设"singleQuote": true,就在.eslintrc.js里关掉quotes规则,而不是设成["error", "single"] - VS Code 设置里要明确指定:
"editor.defaultFormatter": "esbenp.prettier-vscode",否则保存时可能调用错格式化器 - 开启
"editor.codeActionsOnSave": { "source.fixAll.eslint": true },这样保存时既能格式化,又能自动修no-unused-vars这类可修复问题
settings.json 必须纳入版本控制,且优先放在 .vscode/settings.json
用户级设置(全局 settings.json)对团队无效,只有项目级的 .vscode/settings.json 才能确保所有人打开项目就获得一致行为。
- 必须包含
"editor.formatOnSave": true,这是强制落地的开关 - 禁用其他格式化插件干扰:比如加一行
"[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },防止语言特有格式化器抢跑 - 如果项目用 TypeScript,额外加
"[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } - 别把
.vscode加进.gitignore—— 它不是个人配置,是项目契约的一部分
Git 提交前加一道 ESLint 检查,靠 husky + lint-staged
编辑器能拦住大部分问题,但不能保证所有人开着 VS Code 写代码。提交前卡一下,才是最后防线。
- 运行
npx husky-init初始化钩子,再npx husky-add .husky/pre-commit "npx lint-staged" -
lint-staged配置只检查暂存区的 JS 文件:"src/**/*.{js,jsx}": ["eslint --fix", "prettier --write"] - 这个环节发现的错误不会被提交,开发者必须修复后重试,比 Code Review 时指出更早、成本更低
- 注意:不要在 pre-commit 里跑全量 ESLint,只处理暂存文件,否则每次提交都卡几秒,大家会绕过钩子
真正难的不是装插件,而是让每条规则都有对应的动作闭环:编辑器自动应用 → 保存即生效 → 提交前再核验。中间漏一环,风格就会从缝隙里漏出来。










