Я работал над собственным реактивным проектом, и пока выполняющееся приложение горячей перезагрузки переходит в циклическую рекурсию, результатом чего является превышение максимального стека вызовов.Подробнее об этой проблеме можно узнать здесь
Отсюда я понял, что что-то не так, и создаются круговые зависимости.
Я решил попробовать madge и посмотреть, что происходит в проекте.После запуска команды я увидел довольно много циклических зависимостей.
Теперь, так как мой проект требует огромной отладки, это была довольно сложная задача, поэтому я создал небольшую версию своего проекта, содержащую одну папку.
Я создал папку utils, в которой у меня есть 4 файла: -
- utils / index.js
- utils / device-helper.js
- utils / init.js
- index.js
Для импорта я использую babel-module-resolver
utils / init.js
import {deviceInfo} from "utils";
export const init = () => {
// initialising app and calling backend API with device info
};
utils / device-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 {};
}
};
utils / 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 напосле этого работает: -
utils / init.js
import {deviceInfo} from "./device-helpers";
export const init = () => {
// initialising app and calling backend API with device info
};
Я не могу понять причину этой круговой зависимости.Может кто-нибудь помочь, пожалуйста?
Здесь - ссылка на репозиторий.