Vercel部署TypeScript项目遇Cannot find module错误求助
Vercel上TypeScript项目模块导入错误问题
错误信息
Error: Cannot find module '/Users/aidan/work/real-estate/forecasa-serverless-functions-express/api/stateStorage' imported from /Users/aidan/work/real-estate/forecasa-serverless-functions-express/api/companyContact.ts
项目结构
/. /api - companyContact.ts - stateStorage.ts
相关代码
companyContact.ts
import { getState, setState } from './stateStorage';
stateStorage.ts
export const getState = () => { ... }; export const setState = () => { ... };
tsconfig.json
{ "compilerOptions": { "module": "ESNext", "target": "ESNext", "moduleResolution": "node", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true }, "include": ["api/**/*", "api/stateStorage.ts"], "exclude": ["node_modules"] }
已尝试操作
- 确认
stateStorage.ts存在于api目录,文件名拼写正确 - 检查导入语句的相对路径为
./stateStorage,格式无误 - 验证
tsconfig.json中moduleResolution、esModuleInterop等配置符合Node.js环境要求 - 本地测试导入正常,问题仅出现在Vercel环境
结果对比
- 预期:同目录文件可正常导入,无模块解析错误
- 实际:运行
vercel dev时持续提示找不到stateStorage模块
问题
该模块解析错误的原因是什么?如何解决?
解决方案
1. 导入时添加.js后缀
Vercel运行时加载的是TypeScript编译后的.js文件,Node.js在ES模块模式下要求明确文件后缀。修改导入语句:
import { getState, setState } from './stateStorage.js';
同时调整tsconfig.json的编译配置,确保TS支持带后缀的导入:
{ "compilerOptions": { "module": "NodeNext", "moduleResolution": "NodeNext", // 保留其他原有配置 } }
2. 清除Vercel构建缓存
旧缓存可能导致文件未被正确编译或部署:
- 本地删除
.vercel目录,重新执行vercel dev - 登录Vercel控制台,找到对应项目,手动清除构建缓存后重新部署
3. 检查文件名大小写一致性
Vercel使用Linux环境,严格区分文件名大小写,而本地(如macOS)可能不区分。确保stateStorage.ts的大小写和导入语句完全匹配,避免大小写差异导致的路径解析失败。
4. 调整TypeScript输出配置
如果tsconfig.json中设置了outDir,Vercel可能无法正确定位编译后的文件。可暂时移除outDir配置,让编译后的.js文件与源TS文件处于同一目录,简化路径解析逻辑。
内容的提问来源于stack exchange,提问作者amli
相关产品推荐
相关产品推荐

