Reactjs 无法在具有Next.js的模块外使用import语句

Reactjs 无法在具有Next.js的模块外使用import语句,reactjs,package,next.js,Reactjs,Package,Next.js,我需要导入npm包,但在使用“import”语句时失败 像这样 从'lunacomponent'导入{cuteLuna}; 我得到一个错误:不能在模块外使用import语句 我将其更改为动态导入后,它就可以工作了 constcuteluna=dynamic(()=>import('lunacomponent')。然后((a)=>a.cuteLuna),{ssr:false}); 我的问题是,为什么我应该使用动态导入而不是通常的导入 谢谢 由于Next.js是一个运行在服务器和客户端上的框架,

我需要导入npm包,但在使用“import”语句时失败 像这样

从'lunacomponent'导入{cuteLuna};
我得到一个错误:不能在模块外使用import语句

我将其更改为动态导入后,它就可以工作了

constcuteluna=dynamic(()=>import('lunacomponent')。然后((a)=>a.cuteLuna),{ssr:false});
我的问题是,为什么我应该使用动态导入而不是通常的导入


谢谢

由于Next.js是一个运行在服务器客户端上的框架,因此需要为每一方使用适当的模块样式

服务器端在节点上运行,因此您的lib必须公开

从您的错误中,我可以猜到您的
lunacomponent
lib没有导出cjs文件,因此它在服务器上失败,当您将
dynamic
ssr:false
一起使用时,您会告诉Next.js跳过服务器端运行,因此不会出现相同的错误


我在公共npm注册表中找不到这个
lunacomponent
lib,因此我无法检查我的假设。

因为Next.js是一个运行在服务器客户端上的框架,它需要为每个客户端使用适当的模块样式

服务器端在节点上运行,因此您的lib必须公开

从您的错误中,我可以猜到您的
lunacomponent
lib没有导出cjs文件,因此它在服务器上失败,当您将
dynamic
ssr:false
一起使用时,您会告诉Next.js跳过服务器端运行,因此不会出现相同的错误

我无法在公共npm注册表中找到此
lunacomponent
lib,因此无法检查我的假设