我正在开发一个反应本机项目,并且在执行热重载应用程序时进入循环递归,导致超出最大调用堆栈。可以在此处找到有关此问题的更多详细信息
从这里我意识到有问题,并且正在创建循环依赖项。
我决定尝试一下madge,看看项目中发生了什么。运行命令后,我看到了很多循环依赖。
现在,由于我的项目非常庞大,调试是一项艰巨的任务,所以我创建了一个包含单个文件夹的项目的小版本。
我创建了一个 utils 文件夹,其中有 4 个文件:-
- 实用程序/index.js
- 实用程序/设备-helper.js
- 实用程序/init.js
- index.js
对于我正在使用的进口babel-module-resolver
实用程序/init.js
import {deviceInfo} from "utils";
export const init = () => {
// initialising app and calling backend API with device info
};
实用程序/设备-helper.js
import DeviceInfo from "react-native-device-info";
const API_LEVEL = "v0";
export const deviceInfo = () => {
try {
return Object.assign({}, {
apiLevel: API_LEVEL,
deviceId: DeviceInfo.getUniqueID(),
device: DeviceInfo.getDeviceName(),
model: DeviceInfo.getModel(),
osVersion: DeviceInfo.getSystemVersion(),
product: DeviceInfo.getBrand(),
country: DeviceInfo.getDeviceCountry(),
appVersion: DeviceInfo.getVersion(),
manufacturer: DeviceInfo.getManufacturer(),
userAgent: DeviceInfo.getUserAgent(),
buildNumber: DeviceInfo.getBuildNumber(),
bundleId: DeviceInfo.getBundleId()
});
} catch (e) {
// TODO: Report to Bugsnag
return {};
}
};
实用程序/index.js
export * from "./init";
export * from "./device-info-helper";
index.js
export * from "./utils";
运行madge
命令后,我得到以下信息:-
tests-MBP:madge-test harkirat$ madge --circular index.js
Processed 4 files (684ms)
✖ Found 1 circular dependency!
1) utils/index.js > utils/init.js
但是,如果我将 utils/init.js 更改为遵循它的工作原理:-
实用程序/init.js
import {deviceInfo} from "./device-helpers";
export const init = () => {
// initialising app and calling backend API with device info
};
我无法理解这种循环依赖的原因。有人可以帮忙吗?
这是存储库的链接。