Vercel Serverless API(TypeScript)出现ERR_MODULE_NOT_FOUND错误求助
问题概述
基于Vite的Vue3+TypeScript项目,通过Vercel部署Serverless API端点,项目结构将API文件放在api目录,业务逻辑放在同级的backend目录。本地运行正常,但生产部署后api/index.ts无法导入../backend/const.ts,报错ERR_MODULE_NOT_FOUND,已尝试合并目录、更新路径、重新部署、切换Node版本、修改TS target等方法均无效。
修复与调试思路
配置Vercel打包时包含backend目录
Vercel默认仅部署api、public及前端构建产物目录,backend目录可能未被纳入Serverless函数的打包范围。需在项目根目录创建或修改vercel.json,指定API函数需要包含的额外文件:{ "functions": { "api/**/*.ts": { "includeFiles": "backend/**/*.ts" } } }这样Vercel会将
backend目录的文件一同打包到函数运行环境中。确保导入语句使用完整文件后缀
Node.js的ES模块(ESM)要求导入必须带完整后缀,本地开发时TS工具链可能允许省略,但生产环境的Node严格遵循规则。修改导入语句为编译后的文件后缀(注意是.js而非.ts):import { a } from '../backend/const.js';检查TS编译配置的覆盖范围
确认tsconfig.json的include字段包含backend目录,确保编译时该目录的TS文件被处理:{ "include": ["src/**/*", "api/**/*", "backend/**/*"] }同时检查
outDir配置,确保编译后的backend文件位置与API文件的导入路径匹配。本地模拟Vercel构建环境
使用Vercel CLI在本地复现生产构建流程,查看打包后的文件结构是否符合预期:# 构建项目 vercel build # 本地运行生产环境 vercel dev这样可以直接在本地排查
backend目录是否被正确打包,以及导入路径是否存在问题。排查文件名大小写问题
Vercel运行环境为Linux,严格区分文件名大小写,而本地Windows/macOS默认不区分。确认导入路径中的文件名与实际backend目录下的文件名完全一致(比如const.ts不能写成Const.ts)。
内容的提问来源于stack exchange,提问作者Simone

