6

我正在开发一个反应本机项目,并且在执行热重载应用程序时进入循环递归,导致超出最大调用堆栈。可以在此处找到有关此问题的更多详细信息

从这里我意识到有问题,并且正在创建循环依赖项。

我决定尝试一下madge,看看项目中发生了什么。运行命令后,我看到了很多循环依赖。

现在,由于我的项目非常庞大,调试是一项艰巨的任务,所以我创建了一个包含单个文件夹的项目的小版本。

我创建了一个 utils 文件夹,其中有 4 个文件:-

  1. 实用程序/index.js
  2. 实用程序/设备-helper.js
  3. 实用程序/init.js
  4. 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
};

我无法理解这种循环依赖的原因。有人可以帮忙吗?

是存储库的链接。

4

1 回答 1

1

我在回购中没有看到 a .babelrc,但这是我的想法:

  1. utils/init.js您导入时使用:

import {deviceInfo} from "utils";

这与以下内容相同:

import {deviceInfo} from "./utils/index";

  1. utils/index.js你做一个export * from "./init". 这export from基本上首先导入所有内容./utils/init并重新导出它。

所以:

  • utils/init.js从进口./utils/index
  • ./utils/index.js从进口./utils/init

有你的循环依赖。

于 2018-09-21T10:28:23.373 回答