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

Допустим, вы хотите импортировать ту же функцию, которая открывает URL-адрес в новой вкладке браузера, но все мы знаем, что веб-API отличается от API браузера Expo.

Итак, у вас может быть одно имя пакета, скажем, @yourcompany/open-url, внутри этого пакета вы можете иметь следующие файлы:

openUrl.ts

export function openUrl() { 
  ... do whatever you want for web version
}

openUrl.native.ts

export function openUrl() { 
  ... do whatever you want for native version
}

index.ts

export * from './openUrl';

Я предполагаю, что вы Typescript, но в простом проекте Javascript этот подход также работает.

ВАЖНО. Имена функций и констант должны совпадать.

Следуя этой идее, вы можете унифицировать свои компоненты для работы с одним и тем же API как в браузере, так и в нативной среде.

Рассмотрим более крупный пример. Допустим, у вас есть компонент Authentification.tsx.

import Input from '@mycompany/input';
import Button from '@mycompany/button';
import Container from '@mycompany/container';
const Authentification = () => {
  ... any state logic
  return (
    <Container>
      <Input />
      <Input />
      <Button />
    </Container>
   )
 }

Если вы следуете той же идее, что и openUrl в компонентах Input, Container и Button, вы можете импортировать свой компонент Authentication с любой проблемой в любой среде, и у вас будет полностью гибридноеприложение!