部署Node.js Express至Vercel时出现模块未找到错误求助
Node.js部署Vercel出现ERR_MODULE_NOT_FOUND错误的排查与解决
错误核心分析
从日志看,问题是/var/task/routes/Users.routes.js无法找到/var/task/Controllers/Users.controller.js模块,这是Vercel部署Node.js服务时的典型路径或文件匹配问题,下面是具体排查和解决步骤:
一、优先排查大小写问题
Vercel的运行环境是Linux,文件名和目录名严格区分大小写,但本地Windows/macOS默认不区分,很容易出现本地正常、部署报错的情况:
- 检查你的项目实际目录名:是
controllers(小写)还是Controllers(大写)? - 检查实际文件名:是
users.controller.js还是Users.controller.js? - 修正
Users.routes.js中的导入路径,确保和实际文件完全一致,比如如果是小写目录和文件名,修改为:
import { get_id, addUser, addFriends, getFriends, getPendingFriends, queryUser, startChat, getChats, getUser, getUserServers, changeUserName, createServers, joinServers } from "../controllers/users.controller.js";
二、检查Vercel打包配置与文件路径
- 入口文件路径匹配
看你的vercel.json指定入口是./index.js,但package.json的watch脚本指向src/index.js,如果你的实际代码都在src目录下,Vercel可能没正确打包到所需文件:- 修正
vercel.json的配置,指向正确的入口文件:
{ "builds": [ { "src": "./src/index.js", "use": "@vercel/node" } ], "routes": [ { "src": "/(.*)", "dest": "/src/index.js" } ] } - 修正
- 确认文件层级
确保Controllers目录和routes目录在同一层级,且都在Vercel打包的范围内(不要放在.gitignore里)。
三、排查Babel配置干扰
你使用了babel-plugin-module-resolver,如果.babelrc或babel.config.json中配置了模块别名,可能导致Vercel构建时路径解析错误。可以暂时移除别名配置,改用相对路径测试,确认是否是别名导致的问题。
四、Vercel部署Node.js服务器的实用建议
- 环境变量管理:不要将
.env文件提交到仓库,在Vercel控制台的「项目设置-环境变量」中添加生产所需的环境变量。 - 依赖校验:确保
package.json的dependencies包含所有生产环境需要的包,devDependencies只放开发工具(如nodemon、babel-watch),Vercel默认会跳过devDependencies的安装。 - 本地预测试:部署前先在本地执行
npm install && npm run start,模拟生产环境运行,确保没有问题再推送。 - 本地调试:安装Vercel CLI工具,执行
vercel dev可以在本地模拟Vercel的运行环境,提前发现路径或依赖问题。 - 日志排查:Vercel控制台的「函数-日志」可以查看实时错误信息,部署后如果报错优先看这里的详细堆栈。
内容的提问来源于stack exchange,提问作者Kartik Fulara
相关产品推荐
相关产品推荐

