ESLint纠错规则必须由项目级配置(如项目根目录的.eslintrc.json)驱动,因其被VSCode插件、CLI和CI共同读取,确保跨平台行为一致;全局或工作区settings.json仅控制启用开关,无法共享规则且易导致Windows/macOS解析差异。

跨平台开发时 VSCode 的纠错规则(如 ESLint)必须靠项目级配置驱动,不能依赖用户全局设置。 否则 Windows 用户和 macOS 用户可能触发不同规则、不同错误级别,甚至同一行代码在不同机器上不报错也不修复。
为什么 .eslintrc.json 必须放在项目根目录
ESLint 的配置查找机制是向上遍历直到找到 .eslintrc.json 或 package.json 中的 eslintConfig 字段。如果只在用户全局设置里配了规则,VSCode 的 ESLint 插件会 fallback 到默认规则(eslint:recommended),而忽略你团队定义的 no-console 警告或 semi 强制分号等细节。
- 全局配置(
settings.json里写"eslint.options": { "configFile": ".../my-eslint-config.js" })无法被 Git 共享,新人 clone 项目后立即失效 - 工作区配置(
.vscode/settings.json)只能控制“是否启用 ESLint”,不能替代规则定义本身 - 真正起效的只有项目根目录下的
.eslintrc.json(或.eslintrc.js),它会被eslintCLI、VSCode 插件、CI 流程共同读取
如何让 ESLint 在 Windows/macOS/Linux 上行为完全一致
关键不是“适配系统”,而是**禁用所有系统相关路径或环境判断逻辑**。ESLint 本身是 Node.js 工具,跨平台一致性取决于配置是否纯净、插件是否版本锁定。
- 确保
.eslintrc.json中不使用__dirname、process.platform等动态值(这些只在.eslintrc.js中可能出现,应避免) - 所有插件(如
eslint-plugin-react)必须通过devDependencies安装,并在package.json中锁死版本,例如:"eslint-plugin-react": "7.34.2" - 在
.vscode/settings.json中显式指定 ESLint 工作区路径,防止插件误用全局安装的 ESLint:"eslint.workingDirectories": [{ "mode": "auto" }] - 禁用 Windows 特有的文件路径处理:在
.eslintrc.json的settings下加"import/resolver": { "node": { "extensions": [".js", ".jsx", ".ts", ".tsx"] } },避免因\和/混用导致路径解析失败
VSCode 里 ESLint 报错但命令行不报?检查这三点
这是跨平台最典型的“纠错不一致”现象,根源几乎都在路径或解析上下文差异。
- VSCode 插件默认以打开的文件所在文件夹为工作目录;而你在终端运行
npx eslint src/App.js时,当前目录可能是项目根或子目录 —— 导致extends路径解析结果不同 - 检查
eslint.validate设置是否遗漏语言:"eslint.validate": ["javascript", "typescript", "vue"],缺项会导致某些文件根本没进 ESLint 流程 - Windows 用户注意:如果
.eslintrc.json里用了单引号包裹路径(如'./rules/my-rule'),某些旧版 Node 在 Windows 下会解析失败;统一改用双引号
不要把纠错逻辑塞进 settings.json
有人试图在 .vscode/settings.json 里直接写规则,比如:"eslint.rules.custom": { "no-alert": "error" } —— 这完全无效。settings.json 不支持自定义规则声明,ESLint 插件只认标准配置文件。
- 所有规则必须定义在
.eslintrc.json、.eslintrc.js或package.json#eslintConfig -
.vscode/settings.json只负责开关行为:"eslint.enable"、"eslint.run"(onSave/onType)、"eslint.format.enable" - 若需按语言差异化规则(如 TypeScript 允许
any,JavaScript 不允许),必须用.eslintrc.js动态导出,而不是靠 VSCode 设置切换
最易被忽略的一点:ESLint 规则是否生效,最终取决于 eslint 进程启动时加载的配置文件路径,而不是 VSCode 界面里显示的“已启用”。打开 VSCode 输出面板,切换到 ESLint 标签页,看它实际读取的是哪个 .eslintrc.* 文件 —— 这才是真相。


















