我在nextjs中有一个应用程序,它将示例化一个类(控制器),这个类将执行所有的访问类型,比如从数据库中获取数据。但总是得到这个错误:
Error [ReferenceError]: Cannot access '__WEBPACK_DEFAULT_EXPORT__' before initialization
字符串
我的控制器就像Object(将具有用于此类数据的方法),这些方法扩展了BusinessObject(将有提交、删除、加载数据的方法),在其构造函数中示例化DataObject(将有方法访问和更新数据库)。这在我的CRA应用程序中工作正常,但在NextJs中导入这些控制器时,我会出错,但是当我直接使用数据库时,它不会发生(比如mongodb FindOne())。
触发错误的代码(/API/[...]/ GET方法):
import MyObject from "@monorepo/controllers/MyObject";
型
从该类型的任何对象获取错误。
1条答案
按热度按时间ccrfmcuu1#
回答第二个问题:
Why does this error only happens now that I am using a NextJs application to import the same classes, and it works fine in a classic CRA application>
在搜索了documentation和Github Issue#32360之后,我认为这是因为
Next.js
对循环依赖的支持有限,有时它可能会在不同的版本中中断。事实上,循环依赖对于JavaScript来说一直是一件很混乱的事情,
webpack
的文档也支持这条语句:JavaScript作为一种语言、一种平台以及一种快速开发和创建快速应用程序的方式正在接管世界。
但是没有浏览器支持CommonJS。没有活动绑定。循环引用存在问题。同步模块解析和加载缓慢。虽然CommonJS是Node.js项目的一个很好的解决方案,但浏览器不支持模块,因此创建了Browserify,SystemJS和SystemJS等工具,允许我们编写在浏览器中运行的CommonJS模块。
如果这还不足以解释的话,即使是
Node.js
(Webpack
运行在Node.js
上)对循环依赖的容忍度也是有限的。也许如果你使用
require()
而不是import()
,这个问题就可以解决了。但是,代价是它牺牲了在初始导入之前完全加载模块的能力-这可能会导致意外的行为和结果。结论:尽可能避免循环依赖。