Nuxt部署Heroku报错Cannot find module 'defu'问题求助
问题根因
报错Cannot find module 'defu' from '/app'是生产环境依赖缺失导致的。
本地运行正常是因为本地开发环境安装了全量依赖与嵌套包,而Heroku部署时默认执行生产模式依赖安装,仅安装dependencies下声明的包及其合法嵌套依赖,defu作为Nuxt生态核心工具包(Nuxt本体、@nuxtjs/auth-next都依赖该包)未被正确安装,通常由两个问题触发:
- 项目锁文件(
package-lock.json/yarn.lock)损坏、或被.gitignore规则忽略未提交到仓库,导致Heroku端依赖版本解析出错,漏装该包 - 本地依赖安装时存在异常,node_modules有残留缓存但依赖树未被正确记录到package.json与锁文件中
修复步骤
- 显式声明缺失的生产依赖
本地项目根目录执行以下命令,直接将defu加入生产依赖,从根源避免嵌套依赖解析导致的漏装问题:
npm install defu
执行完成后确认package.json的dependencies字段中已新增defu的版本声明即可。
- 校验锁文件提交状态
打开根目录.gitignore文件,确认不存在忽略package-lock.json的规则。如果之前该文件被忽略,删除对应忽略规则后执行:
git add package-lock.json
注意:node_modules目录必须保留在.gitignore中,不要将本地依赖目录提交到Git,否则会因Heroku运行环境与本地环境的架构、系统差异触发额外运行错误,Heroku部署时会自动执行依赖安装。
- 清理Heroku构建缓存后重新部署
Heroku会缓存历史构建的依赖文件,旧缓存可能导致依赖更新不生效,先执行命令清理缓存:
heroku plugins:install heroku-builds heroku builds:cache:purge -a 替换为你的Heroku应用名称
之后提交所有变更,重新推送代码部署:
git add . git commit -m "fix: resolve missing defu dependency in production" git push heroku development:master
额外配置提醒
你贴出的nuxt.config.js里有两个后续可能触发问题的配置,建议提前调整:
- axios的
baseURL当前写为http://localhost:8080,Heroku容器内的localhost指向容器自身,无法访问你本地运行的后端服务,依赖问题修复后需要将该值替换为后端服务的公网可访问地址,否则所有接口请求都会失败 - plugins配置中
{ src: '~plugins//vue-burger-menu', mode: 'client' }路径多写了一个斜杠,虽然Nuxt大多时候能兼容路径解析,但建议修正为~plugins/vue-burger-menu,避免极端场景下的路径解析错误
内容的提问来源于stack exchange,提问作者Aerius
相关产品推荐
相关产品推荐

