Nuxt Bridge出现external_defu_default(...) is not a function报错
报错信息
nuxt - external_defu_default(...) is not a function
问题背景
执行Nuxt应用生成操作时触发该报错,当前技术栈为Nuxt Bridge + Tailwind,已尝试卸载未使用依赖,问题未解决。
环境版本信息:
- Node:v16.14.0
- Nuxt:nuxt bridge-edge
完整错误日志
at Array.reduce (<anonymous>) at new runtime_BaseScheme (./node_modules/.cache/nuxt/prerender/chunks/app/server.mjs:14075:28) at new LocalScheme (./node_modules/.cache/nuxt/prerender/chunks/app/server.mjs:14121:5) at auth (./node_modules/.cache/nuxt/prerender/chunks/app/server.mjs:14314:35) at createApp (./node_modules/.cache/nuxt/prerender/chunks/app/server.mjs:14632:11) at async module.exports.__webpack_exports__.default (./node_modules/.cache/nuxt/prerender/chunks/app/server.mjs:14781:7) at async renderToString (./node_modules/.cache/nuxt/prerender/chunks/renderer.mjs:278:19) at async ./node_modules/.cache/nuxt/prerender/chunks/renderer.mjs:611:20 at async ./node_modules/h3/dist/index.mjs:420:19 at async nodeHandler (./node_modules/h3/dist/index.mjs:370:7) at async ufetch (./node_modules/unenv/runtime/fetch/index.mjs:9:17) at async generateRoute (./node_modules/nitropack/dist/chunks/prerender.mjs:2172:17) at async Task.task (./node_modules/nitropack/dist/chunks/prerender.mjs:2194:29)
根因定位
从错误调用栈的BaseScheme、LocalScheme、auth字段可以判断,问题和@nuxtjs/auth-next模块有关:Nuxt Bridge依赖的defu包v6+版本为ESM规范导出,旧版auth模块采用CommonJS规则导入defu时,无法正确拿到默认导出的函数,最终触发is not a function报错,和Tailwind、未使用的冗余依赖无关。
修复步骤
按顺序操作即可解决问题:
- 第一步:清理本地冗余文件
删除项目根目录下的node_modules文件夹、.nuxt缓存文件夹,以及对应包管理器的锁文件(npm对应package-lock.json、yarn对应yarn.lock、pnpm对应pnpm-lock.yaml)。 - 第二步:锁定defu兼容版本
在package.json中添加版本强制覆盖配置,让全项目依赖统一使用兼容版本的defu:
使用npm/pnpm的用户添加overrides字段:
使用yarn的用户添加{ "overrides": { "defu": "6.1.2" } }resolutions字段:{ "resolutions": { "defu": "6.1.2" } } - 第三步:调整Nuxt构建配置
在nuxt.config配置文件中,把defu加入构建转译列表,避免导入时的规范兼容问题:
注意如果项目中自定义了auth相关配置,不要从非官方路径导入defu做配置合并,统一使用export default defineNuxtConfig({ // 保留原有其他配置 build: { transpile: [ 'defu', // 保留原有其他转译项 ] } })import defu from 'defu'的导入方式。 - 第四步:重新安装依赖构建
执行包管理器的安装命令重装依赖,之后重新运行生成命令即可。
补充:v16.14.0是Node 16的早期版本,存在部分ESM兼容bug,如果上述操作完成后仍有偶发报错,可以把Node升级到16.x的最终维护版本v16.20.2,稳定性更好。
内容的提问来源于stack exchange,提问作者tree
相关产品推荐
相关产品推荐

