Dev48
ЯЗЫК
  • О нас
  • Услуги
  • Индустрии
  • Технологии
  • Статьи
  • Контакты
Забронировать звонок
    Главная/Статьи/React native 087 strogiy typescript api obnovlenie metro swift package manager p 2
Dev48

© 2026 · All rights reserved.

React Native 0.87 — строгий TypeScript API, обновление Metro, Swift Package Manager, поддержка AGP 9

Источник: React Native

React Native 0.87 — строгий TypeScript API, обновление Metro, Swift Package Manager, поддержка AGP 9

Источник: React Native

Сегодня мы рады представить React Native 0.87!

27 сентября 2026 г.•Обновлено: 27 сентября 2026 г.

Сегодня мы рады представить React Native 0.87!

В этом релизе строгий TypeScript API стал API по умолчанию для JavaScript, Metro обновлен до версии 0.87, добавлена экспериментальная поддержка Swift Package Manager (SwiftPM). Также повышены минимальные требования к инструментарию: Node.js 22, Android Gradle Plugin 9 и Kotlin 2.0+.

Основные моменты

  • Строгий TypeScript API по умолчанию
  • Более быстрый и компактный Metro
  • Экспериментальная поддержка Swift Package Manager для iOS
  • Android Gradle Plugin (AGP) v9

Основные моменты

Строгий TypeScript API по умолчанию

Публичный JavaScript API в React Native теперь является строгим TypeScript API. Изначально он был доступен в качестве предварительной версии по выбору в 0.80, одновременно с прекращением поддержки глубокого импорта (deep imports). В 0.87 он становится стандартом для всех проектов.

Это изменение затрагивает всю экосистему и вносит намеренные критические изменения в API. Преимущества:

  • Типы, которым можно доверять: типы теперь генерируются непосредственно из исходного кода React Native, заменяя вручную поддерживаемые определения, которые мы поставляли ранее. Это устраняет давнее расхождение между типами и кодом, улучшая покрытие и точность во всем API.
  • Стабильный API: стабильный API начинается с четкого определения того, что он охватывает. API теперь ограничен тем, что react-native экспортирует в корне, поэтому наши внутренние изменения файлов больше не являются для вас критическими. Начиная с 0.87, JS API React Native меняется только тогда, когда мы этого хотим.

Вот новые типы в действии — при наведении на компонент TextInput:

Комментарии к документации теперь включены для большинства символов, предоставляя более удобную информацию при наведении курсора.

Критические изменения

  • Глубокий импорт внутренних путей (например, react-native/Libraries/*) теперь вызывает ошибку типов и требует миграции.
  • Некоторые имена и структуры типов были обновлены там, где устаревшие определения были неточными или несогласованными — наиболее заметно, что ссылки (refs) теперь имеют выделенные типы (например, ViewInstance, TextInputInstance) (документация).

Начиная с оригинальной предварительной версии 0.80, мы работали с сообществом и партнерами над уточнением нашего API — завершая работу над корневыми экспортами и устраняя несовместимости с популярными библиотеками.

Многие приложения должны иметь возможность обновиться до 0.87 с минимальными ошибками или без них. Руководство по миграции охватывает каждое критическое изменение.

Совет

Автоматизированные обновления могут использовать навык skill, который содержит прямые инструкции по миграции в дополнение к нашим существующим исправлениям ESLint.

Отказ от использования

Мы понимаем, что не каждое приложение или библиотека смогут мигрировать сразу — с учетом этого мы сохраняем переключатель для отказа от использования.

Этот отказ — временный мост: он останется доступным в React Native 0.88, и мы планируем удалить устаревшие типы TypeScript в следующем релизе.

Чтобы временно вернуться к предыдущим типам, добавьте пользовательское условие "react-native-legacy-deep-imports" в ваш tsconfig.json:

tsconfig.json

"extends": "@react-native/typescript-config",

"compilerOptions": {

+ "customConditions": ["react-native", "react-native-legacy-deep-imports"]

  • Отказ от использования влияет только на анализ TypeScript в вашем собственном проекте — приложения и библиотеки мигрируют независимо (подробнее).
  • Если что-то мешает вам перейти на строгий API, пожалуйста, сообщите нам об этом в нашей ветке для обратной связи.
  • Часто задаваемые вопросы — ответы на распространенные вопросы, включая то, влияет ли это на время выполнения, сроки миграции авторов библиотек и почему были заменены ручные типы.
  • Движение к стабильному JavaScript API — наше первоначальное обоснование этой миграции из анонса предварительной версии 0.80.
  • Посмотрите выступление — глубокое погружение в наши мотивации и работу, стоящую за строгим TypeScript API, с конференции App.js 2025.

Более быстрый и компактный Metro

В этом релизе Metro обновлен с 0.84 до 0.87.

  • Генерация карт исходного кода (source maps) теперь в 2 раза быстрее, что ускоряет загрузку React Native DevTools.
  • Metro использует вдвое меньше памяти благодаря более эффективному хранению карт исходного кода.
  • Стабильная поддержка файлов конфигурации TypeScript и ESM, например, metro.config.mts; прекращена поддержка расширений .es6 и конфигураций YAML.
  • Новые функции резолвера, включая саморазрешение пакетов (package self-resolve).
  • Различные исправления и улучшения, см. примечания к выпуску Metro.

Экспериментальная поддержка Swift Package Manager для iOS

React Native 0.87 добавляет экспериментальную поддержку Swift Package Manager в качестве альтернативы CocoaPods на iOS. Это опциональное и дополнительное решение; CocoaPods остается стандартом и поддерживаемым путем. Путь SwiftPM использует те же предварительно собранные XCFrameworks, которые React Native уже публикует.

Эта новая настройка требует только Xcode — никакого Ruby, Bundler или CocoaPods.

Чтобы попробовать это в существующем или новом приложении:

cd ios

# deintegrate удалит CocoaPods из вашего проекта

npx react-native spm --deintegrate

Команда внедряет ссылки на пакеты Swift в ваш существующий .xcodeproj, вместо того чтобы заменять проект. Ваши настройки подписи, возможности и этапы сборки остаются нетронутыми. Команда npx react-native spm deinit отменяет изменения.

Информация

Вы запускаете эту команду только один раз. После первой настройки вам не нужно запускать ее снова при изменении зависимостей. Установите или удалите нативный пакет, затем выполните сборку. Проект обнаружит изменение и перезапустит автолинковку за вас. Нет необходимости выполнять pod install после каждого изменения зависимостей.

Известные ограничения:

  • Библиотека сообщества должна поставлять Package.swift. Если его нет, запустите npx react-native spm scaffold, чтобы сгенерировать его из podspec библиотеки.
  • После свежего клонирования и в CI запускайте npx react-native spm один раз перед сборкой. Это аналог pod install.
  • Команды, флаги и сгенерированная структура могут измениться в будущих релизах. Пока не используйте это в продакшене.

См. полный план проектирования и миграции.

Чтобы должным образом поддержать интеграцию SwiftPM с React Native, нам пришлось переосмыслить способ поставки предварительно скомпилированных бинарных файлов самого React Native. Это необходимо, так как SwiftPM гораздо строже CocoaPods в отношении структуры XCFramework и расположения заголовков.

Вы можете заметить пару новых XCFrameworks:

  • ReactNativeHeaders.xcframework
  • ReactNativeDependenciesHeaders.xcframework

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

- #import <RCTAppDelegate.h>

+ #import <React/RCTAppDelegate.h>

Android Gradle Plugin (AGP) v9

Это первый релиз React Native, который добавляет поддержку AGP 9.

AGP 9.0 — это мажорный релиз, который вносит несколько изменений в API и критические изменения в сборках Gradle.

В частности, в этом релизе рекомендуется отказаться от встроенного Kotlin и нового DSL API из AGP 9. Вы можете сделать это, добавив следующие флаги в файлы android/gradle.properties, как также предложено в помощнике по обновлению:

# Отказ от встроенного Kotlin и нового поведения DSL, поставляемого с AGP 9.

# Начиная с AGP 10.x, эти параметры будут удалены.

android.builtInKotlin=false

android.newDsl=false

Вы можете следить за прогрессом внедрения AGP 9 в экосистеме по ссылке здесь.

Критические изменения

Минимальные требования к инструментарию

  • Теперь требуется Node.js версии >= 22.13.0.
  • Android: минимальная версия Kotlin теперь 2.0+ (встроенная версия Kotlin — 2.2.0).
  • Android: minCompileSdk теперь 34 (библиотеки должны быть нацелены на compileSdk >= 34);
  • Android: compileSdk/buildTools обновлены до 37.

Удаление API

  • Строгий TypeScript API теперь используется по умолчанию (см. Основные моменты) — глубокие импорты в Libraries/ недоступны, если вы не вернете их обратно через "react-native-legacy-deep-imports" (подробности).
  • Глубокие импорты в src/private/ удалены.
  • Устаревшие псевдонимы типов *Properties (например, ViewProperties) недоступны в строгом API — используйте эквиваленты *Props (подробности).
  • Поддержка конфигурационных файлов Metro в формате YAML, а также JavaScript-файлов с расширением .es6, была удалена.
  • Удален InteractionManager — вместо него используйте requestIdleCallback.
  • Удален устаревший анимированный проп Modal.
  • Удалены устаревшие пропы StatusBar: backgroundColor, translucent, networkActivityIndicatorVisible, а также соответствующие им методы установки.
  • Удалена поддержка логических значений для пропа ScrollView keyboardShouldPersistTaps.
  • Удален флаг функции useTurboModules (TurboModules теперь включены всегда).
  • useColorScheme() теперь возвращает ColorSchemeName | null и больше не возвращает 'unspecified'.
  • Удален экспорт NativeDialogManagerAndroid и (недокументированный) корневой экспорт Touchable — вместо этого расширяйте ViewProps.
  • Удалены типы NativeMethods / NativeMethodsMixin (используйте HostInstance).

Пакеты и инструменты

  • Пакет @react-native/core-cli-utils больше не публикуется (по-прежнему доступен в репозитории как эталонная реализация).
  • react-native/rn-get-polyfills удален — используйте @react-native/js-polyfills.
  • Пакет @react-native/jest-preset теперь должен использоваться как отдельный пакет.
  • Удалена поддержка подключения к автономному пакету react-devtools через WebSocket — вместо этого используйте React Native DevTools.

Устаревшие функции

Следующие API являются устаревшими и будут удалены в будущих релизах:

  • react-native/Libraries/Core/InitializeCore → используйте react-native/setup-env (подробности).
  • @react-native/assets-registry → используйте AssetRegistry из react-native и новый @react-native/asset-utils.
  • ImageBackground → используйте View с Image, имеющим абсолютное позиционирование.
  • Интерфейс NativeMethods → используйте HostInstance.
  • Appearance.setColorScheme('unspecified') → используйте 'auto'.
  • Android: DrawerLayoutAndroid → используйте react-native-drawer-layout; UIBlock / UIManagerModule.addUIBlock / prependUIBlock → используйте UIManagerListener или View Commands; конструкторы с флагом new-arch-flag в DefaultReactActivityDelegate.
  • iOS: TimingModule; RCTTurboModuleEnabled() / RCTEnableTurboModule().

Благодарности

React Native 0.87 содержит 265 коммитов от 74 участников. Спасибо за вашу усердную работу!

Мы хотим выразить особую благодарность тем членам сообщества, которые внесли значительный вклад в этот релиз.

  • Alex Hunt за работу над строгим TypeScript API
  • Christian Falch за добавление поддержки Swift Package Manager
  • Rob Hogan за улучшения в Metro
  • Hur Ali за внедрение AGP V9
  • Christoph Purrer за очистку устаревшей архитектуры

Обновление до 0.87

info

Версия 0.87 теперь является последней стабильной версией React Native, а поддержка 0.84.x прекращена. Для получения дополнительной информации см. политику поддержки React Native.

Обновление

Пожалуйста, используйте React Native Upgrade Helper для просмотра изменений кода между версиями React Native для существующих проектов, в дополнение к документации по обновлению.

Создание нового проекта

npx @react-native-community/cli@latest init MyProject --version latest

Expo

Для проектов Expo версия React Native 0.87 будет доступна в составе релизов expo@canary.

← Все статьи