Предотвращение предупреждений о циклическом требовании на терминале

#react-native #intellij-idea #expo

#react-native #intellij-idea #выставка

Вопрос:

Я постоянно получаю Циклы Require разрешены, но могут приводить к неинициализированным значениям. Рассмотрите возможность рефакторинга, чтобы устранить необходимость в цикле.предупреждение на моем терминале, и это сильно затрудняет отладку моей программы.

Я использовал

 YellowBox.ignoreWarnings([
  'Require cycle:', 
])
  

а также

 console.disableYellowBox = true;
  

Но ни то, ни другое не сработало. yellowBox.ignoreWarnings работал только для предупреждений, отображаемых на мобильном устройстве, но не для предупреждений на терминале моей IDE. Как я могу предотвратить получение этих предупреждений на терминале.

Комментарии:

1. нет способа скрыть их, ни в IDEA terminal, ни в system one AFAIK. YellowBox.ignoreWarnings и console.disableYellowBox влияют только на устройства / симуляторы

Ответ №1:

Я прокомментировал приведенные ниже строки, и они перестали появляться как в терминале, так и на устройстве.

node_modules/metro/src/lib/polyfills/require.js (Строка 114)

   console.warn(
    "Require cycle: ".concat(cycle.join(" -> "), "nn")  
      "Require cycles are allowed, but can result in uninitialized values. "  
      "Consider refactoring to remove the need for a cycle."
  );
  

После закомментирования этого предупреждения перезапуск проекта устранил мои проблемы.
PS. Я использую expo.

Ответ №2:

Мое решение этой проблемы, надеюсь, оно поможет другим:

 import { AppRegistry, LogBox } from 'react-native';
import App from './App';
import { name as appName } from './app.json';

LogBox.ignoreLogs(['Require cycle:']);

AppRegistry.registerComponent(appName, () => App);
  

Комментарии:

1. Это хорошо работает, используется с RN 0.70.7

Ответ №3:

Я закомментировал консоль.предупреждение в node_modules/expo/build/environment/muteWarnings.fx.js строке 10.

 console.warn = function warn(...args) {
    // if (args.length > 0 amp;amp;
    //     typeof args[0] === 'string' amp;amp;
    //     (/^Require cycle: .*node_modules/.test(args[0]) ||
    //         /Use UIManager.getViewManagerConfig('LottieAnimationView') instead./.test(args[0]) ||
    //         /ReactNative.NativeModules.LottieAnimationView.getConstants/.test(args[0]))) {
    //     return;
    // }
    // originalWarn.apply(console, args);
};
  

Ответ №4:

Я пошел более безопасным путем 🙂 Я использовал patch-package, чтобы убедиться, что я все еще вижу свои собственные ошибки … ммм … требуются циклы 🙂

metro 0.59.0.исправление

 diff --git a/node_modules/metro/.DS_Store b/node_modules/metro/.DS_Store
new file mode 100644
index 0000000..21ab2f3
Binary files /dev/null and b/node_modules/metro/.DS_Store differ
diff --git a/node_modules/metro/src/lib/polyfills/require.js b/node_modules/metro/src/lib/polyfills/require.js
index 8c04756..3b208f6 100644
--- a/node_modules/metro/src/lib/polyfills/require.js
    b/node_modules/metro/src/lib/polyfills/require.js
@@ -114,11  114,14 @@ function metroRequire(moduleId) {
         .map(id => (modules[id] ? modules[id].verboseName : "[unknown]")); // We want to show A -> B -> A:
 
       cycle.push(cycle[0]);
-      console.warn(
-        `Require cycle: ${cycle.join(" -> ")}nn`  
       const cycleString = cycle?.join(" -> ");
       if (!(cycleString?.startsWith('node_modules/'))) {
         console.warn(
           `Require cycle: ${cycleString}nn`  
           "Require cycles are allowed, but can result in uninitialized values. "  
           "Consider refactoring to remove the need for a cycle."
-      );
         );
       }
     }
   }
 
  

Ответ №5:

Скрытие желтых полей — это не решение, это своего рода исправление. Вам следует заглянуть в свой код, на самом деле проблема заключается в том, что ваши компоненты будут требовать друг друга. Например, вы создаете компонент A, который импортирует B, а в B вы импортируете A. Если вы, пожалуйста, покажете свои полные журналы, я дополнительно расскажу вам о точных компонентах.