NextJS/Vercel 部署时导入失败,但本地运行正常
看起来你这问题确实挺头疼的——本地跑完全没问题,一推到Vercel就报模块找不到,我之前也碰到过类似的情况,大概率是路径解析或者配置的问题,给你几个排查方向:
检查路径别名的配置文件
你用@/这种别名导入,肯定是在jsconfig.json(JS项目)或者tsconfig.json(TS项目)里配置了路径映射对吧?得确保这个配置在Vercel构建时能被正确识别。比如你的配置应该是类似这样的:{ "compilerOptions": { "baseUrl": ".", "paths": { "@/*": ["src/*"] } } }重点确认
baseUrl和paths的指向是不是和你的项目结构匹配,比如你的scripts文件夹是不是在src目录下?本地IDE可能自动识别了配置,但Vercel构建时需要明确这个规则。注意文件名和文件夹的大小写
本地如果是Windows系统,文件名大小写不敏感,但Vercel用的是Linux服务器,大小写是严格区分的。比如你代码里写的是@/scripts/fadeInElements,但实际文件是不是叫FadeInElements.js或者文件夹是Scripts?这种大小写不一致的情况很容易导致部署时找不到模块。验证Vercel的构建配置
去Vercel的项目设置里看看构建命令是不是和你本地用的一样,比如本地用npm run build,Vercel也得配置相同的命令。另外,有没有用到本地的环境变量或者自定义构建脚本,导致Vercel构建时的路径解析逻辑和本地不一样?临时用相对路径测试
你可以先把导入语句改成相对路径试试,比如import fadeInElements from '../scripts/fadeInElements'(根据你的文件层级调整),如果这样Vercel能正常部署,那基本可以确定是路径别名的配置问题,再回头去调整别名配置就行。检查.gitignore是否排除了目标文件
还有一种可能:你是不是不小心在.gitignore里把scripts文件夹或者这个文件排除了?这样本地有文件,但推送到Vercel的时候文件没传上去,自然会报找不到模块的错误。
备注:内容来源于stack exchange,提问作者Shane Harley

