You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:23:14