我在尝试在 nextjs 13 中实例化类(控制器)时遇到问题

问题描述 投票:0回答:1

我在 nextjs 中有一个应用程序,它将实例化一个类(控制器),该类将执行所有访问类型,例如从数据库获取数据。但总是出现这个错误:

Error [ReferenceError]: Cannot access '__WEBPACK_DEFAULT_EXPORT__' before initialization

我的控制器就像对象(将具有用于此类数据的方法),它扩展 BusinessObject(将具有提交、删除、加载数据的方法),在其构造函数内实例化 DataAccessObject(将具有访问和更新数据库的方法)。 这在我的 CRA 应用程序中工作正常,但在 NextJs 中,导入这些控制器时出现错误,但当我直接使用数据库时,它不会发生(如 mongodb FindOne())。

触发错误的代码(/api/[...]/ GET方法):

import MyObject from "@monorepo/controllers/MyObject";

从该类型的任何对象中获取错误。

javascript reactjs next.js import controller
1个回答
0
投票

有时间回答第二个问题:

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>

在搜索了文档Github Issue#32360后,我认为这是因为

Next.js
对循环依赖的支持有限,有时可能会因版本不同而中断。

事实上,循环依赖对于 JavaScript 来说一直是一件比较混乱的事情,这个说法也得到了

webpack
文档的支持:

JavaScript 作为一种语言、一个平台以及一种快速开发和创建快速应用程序的方式正在占领世界。

但是没有浏览器支持 CommonJS。没有实时绑定。循环引用存在问题。同步模块解析和加载速度慢。虽然 CommonJS 是 Node.js 项目的一个很好的解决方案,但浏览器不支持模块,因此创建了 Browserify、RequireJS 和 SystemJS 等捆绑器和工具,使我们能够编写在浏览器中运行的 CommonJS 模块。

如果这还不足以解释,即使是

Node.js
Webpack
Node.js
上运行)对循环依赖的容忍度也有限。

也许如果您使用

require()
而不是
import()
,问题就可以解决。然而,代价是它牺牲了在初始导入之前完全加载模块 - 这可能会导致意外的行为和结果。

结论:尽可能避免循环依赖。

© www.soinside.com 2019 - 2024. All rights reserved.