placements运行 Nuxt SSR 产物时出现以下错误:
SyntaxError: The requested module '@popperjs/core' does not provide an export named 'placements'
element-plus@2.14.3 使用的并非原版 @popperjs/core,而是使用了 npm 包别名:@popperjs/core 时,Nitro 在运行时解析到了错误的包,导致缺少 placements 导出。alias 仍无法解决:
原因:pnpm 将 @sxzz/popperjs-es 安装为 Element Plus 的嵌套依赖,项目根目录并没有对应路径,导致 Vite 报 ENOENT 错误。移除手动添加的 alias,让 pnpm 按照 Element Plus 的依赖关系正常解析,并在 SSR 构建时内联相关依赖:
TypeScript
// nuxt.config.ts
export default defineNuxtConfig({
nitro: {
externals: {
inline: ['element-plus', '@element-plus/icons-vue'],
},
},
vite: {
ssr: {
noExternal: ['element-plus', '@popperjs/core'],
},
},
})
vue-countup-v3 缺少默认导出修复 Element Plus 部署后,SSR 运行时出现以下错误:
Bash
SyntaxError: The requested module 'vue-countup-v3' does not provide an export named 'default'
vue-countup-v3@1.4.2 在 package.json 中同时提供了两个入口:
JSON
{
"main": "dist/vue-countup-v3.umd.js",
"module": "dist/vue-countup-v3.es.js"
}
其 ESM 构建文件包含默认导出(export default),但 Nitro 在外置依赖(external)后,Node.js 运行时使用了 UMD 入口,导致 Node.js 无法获取到默认导出。
将该依赖同时加入 Nitro 和 Vite 的 SSR 内联列表中:
TypeScript
// nuxt.config.ts
export default defineNuxtConfig({
nitro: {
externals: {
inline: [
'element-plus',
'@element-plus/icons-vue',
'vue-countup-v3',
],
},
},
vite: {
ssr: {
noExternal: [
'element-plus',
'@popperjs/core',
'vue-countup-v3',
],
},
},
})
此类错误通常不是业务代码的导入语法问题,而是第三方依赖在 SSR 环境中被外置(externalized)后,Node.js 加载了不兼容的模块入口(如 UMD)或解析到了错误的嵌套依赖。
package.json 中的 main、module 及 exports 配置。vite.ssr.noExternal 和 nitro.externals.inline 进行强制打包/内联。
评论 (0)