tsc文件大小写报错
tsc 编译器缓存导致文件大小写报错的排查与解决
#resource / typescript
#type / howto
#status / evergreen
[!info] related notes
tsc文件大小写报错
目标
解决 TypeScript 编译时因文件名大小写不一致导致的报错(如 Cannot find module './Utils' 但文件实际为 utils.ts)。
前置条件
- TypeScript 项目
- Windows 或 macOS(文件系统默认不区分大小写)
- Linux 上不常见此问题(ext4 默认区分大小写)
现象
tsc 报错类似:
error TS2307: Cannot find module './components/UserList' or its corresponding type declarations.
但文件实际存在于 ./components/userList.ts(小写 u)。
原因
- 操作系统不区分大小写:Windows (NTFS) 和 macOS (APFS) 默认文件名不区分大小写,
import './Utils'能正常找到utils.ts - Git 跟踪大小写变更:Git 默认配置
core.ignorecase=true,重命名大小写后 Git 可能保留旧的索引 - tsc 增量编译缓存:TypeScript 的
.tsbuildinfo缓存中记录了旧的大小写路径
步骤
1. 清除编译缓存
# Windows PowerShell
cd packages/domain-server
Remove-Item -Recurse -Force node_modules -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force dist -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force *.tsbuildinfo -ErrorAction SilentlyContinue
npm install
# macOS / Linux
cd packages/domain-server
rm -rf node_modules dist *.tsbuildinfo
npm install
2. 统一 import 路径大小写
# 查找可能有问题的 import
grep -rn "from './" --include="*.ts" --include="*.tsx" src/
确保 import 路径与实际文件名大小写完全一致。
3. 配置 tsconfig.json 严格检查
{
"compilerOptions": {
"forceConsistentCasingInFileNames": true
}
}
此选项会让 tsc 在大小写不匹配时直接报错,而不是依赖操作系统行为。
4. Git 配置
# 让 Git 区分大小写(推荐)
git config core.ignorecase false
# 如果已有大小写问题的文件,强制重命名
git mv src/components/UserList.ts src/components/userList.ts
验证
- 开启
forceConsistentCasingInFileNames后重新编译,确认大小写不匹配的 import 会报错 - 在 CI 环境(通常是 Linux)跑一次构建,确认不因大小写问题失败