在 Nuxt 4.2.0 环境下启动项目时,浏览器控制台出现警告:
The requested module '/_nuxt/@fs/Users/.../node_modules/.pnpm/extend@3.0.2/node_modules/extend/index.js?v=ceccc7a5' does not provide an export named 'default'
The requested module '/_nuxt/@fs/Users/yixuanmiao/MOVK/movk-nuxt-docs/node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/browser.js?v=c82ce804' does not provide an export named 'default'
这是一个 CommonJS 和 ESM 模块系统兼容性问题:
extend 和 debug 是老旧的 CommonJS 包,使用 module.exports 导出package.json 中设置了 "type": "module")修改 nuxt.config.ts:
export default defineNuxtConfig({
vite: {
optimizeDeps: {
include: [
'extend', // unified 所需(用于 @nuxt/content 的 markdown 处理)
'debug', // Babel 和开发工具所需
]
},
resolve: {
alias: {
extend: 'extend/index.js',
debug: 'debug/src/browser.js'
}
}
}
})
使用 Nuxt 原生支持的包:
pnpm install defu
然后使用:
import { defu } from 'defu'
const merged = defu(obj1, obj2)
或使用 lodash-es:
npm install lodash-es
import { merge } from 'lodash-es'
import * as extend from 'extend';
创建一个 composable:composables/useExtend.ts
export const useExtend = () => {
// 动态导入
const extend = import('extend').then(m => m.default || m);
return extend;
}
如果只在服务端需要,可以这样:
// server/api/something.ts
const extend = require('extend') // Node.js 环境可以用 require