Предотвратить предупреждения о необходимости цикла на терминале

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

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

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

а также

console.disableYellowBox = true;

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

их никак не скрыть, ни терминала IDEA, ни из системного AFAIK. YellowBox.ignoreWarnings и console.disableYellowBox действуют только на устройства/симуляторы

lena 28.03.2019 13:23
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
9
1
3 820
5

Ответы 5

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

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

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

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

Я закомментировал console.warn в node_modules/expo/build/environment/muteWarnings.fx.js строке 10.

console.warn = function warn(...args) {
    // if (args.length > 0 &&
    //     typeof args[0] === 'string' &&
    //     (/^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);
};

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

метро+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(" -> ")}\n\n` +
+      const cycleString = cycle?.join(" -> ");
+      if (!(cycleString?.startsWith('node_modules/'))) {
+        console.warn(
+          `Require cycle: ${cycleString}\n\n` +
           "Require cycles are allowed, but can result in uninitialized values. " +
           "Consider refactoring to remove the need for a cycle."
-      );
+        );
+      }
     }
   }
 

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

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);

Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, редактировать, чтобы добавить дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.

Community 09.01.2022 08:46

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

Другие вопросы по теме