Перейти к содержанию

Ускорение сборки CI

Возможно, вы или ваша компания создали среду непрерывной интеграции (CI) для тестирования вашего приложения React Native.

Быстрая служба CI важна по двум причинам:

  • Чем больше времени работают CI-машины, тем больше они стоят.
  • Чем дольше выполняются задания CI, тем длиннее цикл разработки.

Поэтому важно постараться минимизировать время, которое среда CI тратит на сборку React Native.

Отключите Flipper для iOS

Flipper — это инструмент отладки, поставляемый по умолчанию с React Native, чтобы помочь разработчикам отлаживать и профилировать свои приложения React Native. Однако Flipper не требуется в CI: очень маловероятно, что вам или кому-то из ваших коллег придется отлаживать приложение, созданное в среде CI.

Для iOS-приложений Flipper собирается каждый раз, когда собирается фреймворк React Native, и на сборку может потребоваться некоторое время, а это время вы можете сэкономить.

Начиная с React Native 0.71, мы ввели новый флаг в Podfile шаблона: флаг NO_FLIPPER.

По умолчанию флаг NO_FLIPPER не установлен, поэтому Flipper будет включен по умолчанию в ваше приложение.

Вы можете указать NO_FLIPPER=1 при установке ваших iOS pods, чтобы указать React Native не устанавливать Flipper. Обычно команда выглядит следующим образом:

1
2
# from the root folder of the react native project
NO_FLIPPER=1 bundle exec pod install --project-directory=ios

Добавьте эту команду в вашу среду CI, чтобы пропустить установку зависимостей Flipper и тем самым сэкономить время и деньги.

Обработка переходных зависимостей

Ваше приложение может использовать некоторые библиотеки, которые зависят от Flipper pods. Если это так, то отключения flipper с помощью флага NO_FLIPPER может быть недостаточно: ваше приложение может не собраться в этом случае.

Правильный способ справиться с этой проблемой — добавить пользовательскую конфигурацию для react native, указав приложению правильно установить переходную зависимость. Для этого:

  1. Если у вас его еще нет, создайте новый файл react-native.config.js.
  2. Исключите явно переходную зависимость из зависимостей, когда флаг включен.

Например, библиотека react-native-flipper — это дополнительная библиотека, которая зависит от Flipper. Если ваше приложение использует ее, вам нужно исключить ее из зависимостей. Ваш react-native.config.js будет выглядеть следующим образом:

react-native.config.js
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
module.exports = {
    // other fields
    dependencies: {
        ...(process.env.NO_FLIPPER
            ? {
                  'react-native-flipper': {
                      platforms: { ios: null },
                  },
              }
            : {}),
    },
};

Комментарии