JavaScript Monorepo中Lint-Staged配置报错问题求助
问题分析与解决方案
疑问1:暂存web文件却处理mobile目录的原因
你的lint-staged配置里的tsc命令存在两处关键问题:
- 排除参数误用了全角破折号
—-exclude,而非有效的半角--exclude,导致参数完全失效; - 执行
tsc --noEmit时未指定--project参数,TypeScript默认加载根目录的tsconfig.base.json。该根配置未明确include/exclude规则,会默认扫描整个项目目录,因此会处理到apps/mobile下的文件。
疑问2:mobile的jsx配置生效却报错的原因
报错时TypeScript使用的是根目录的tsconfig.base.json,这个配置没有设置jsx编译选项。即便mobile自身的tsconfig配置了jsx: "react-native",但由于执行tsc时未指定加载mobile的配置,根配置的缺失会导致扫描到mobile的tsx文件时触发--jsx未设置的错误。
修复方案
修改lint-staged.config.cjs中的tsc命令,明确指定使用web项目的tsconfig,确保仅检查web相关文件:
module.exports = { 'apps/web/**/*.{ts,tsx,cjs}': [ 'pnpm --filter web exec eslint -c ./.eslintrc.cjs --ignore-path ./.eslintignore --fix', // 指定web项目的tsconfig执行类型检查 () => 'tsc --noEmit --project apps/web/tsconfig.json', ], };
额外建议:如果根目录的tsconfig无需扫描子项目,可添加exclude: ["apps"]配置,避免后续其他命令误扫描子项目文件,但核心修复仍是指定web的tsconfig执行类型检查。
内容的提问来源于stack exchange,提问作者Amir Ben Shimol
相关产品推荐
相关产品推荐

