У меня есть монорепозиторий, который предоставляет модуль TypeScript, который потребляется и используется проектом React TypeScript.
Когда модуль вставляет произвольные элементы React в виртуальную DOM - все работает, как ожидалось, в том числе когда я попробуйте использовать React Router (что изначально было проблемой c, но я смог это исправить).
Однако, когда я пытаюсь использовать response-intl через FormattedMessage
, я получаю сообщение об ошибке:
Error: [React Intl] Could not find required `intl` object. <IntlProvider> needs to exist in the component ancestry.
Что особенно раздражает, поскольку я вижу это напечатанное в журналах консоли:
The above error occurred in the <Context.Consumer> component:
in FormattedMessage
in h2
in div
in Loading (at App.tsx:11)
in IntlProvider (at App.tsx:8)
in App (at src/index.tsx:9)
in StrictMode (at src/index.tsx:8)
(обратите внимание на IntlProvider
обертку Loading
- элемент, который использует FormattedMessage
который не может найти IntlProvider
).
Я предполагаю, что это как-то связано с управлением версиями или наличием двух экземпляров React / React DOM / IntlProvider, но я понятия не имею, как это решить, и я потратил довольно много времени, пробуя все, что мог придумать.
Для чего это стоит, вот что я использую:
- TypeScript - как для модуля, так и для проекта
- Webpack для упаковки м odule, где я объявил React, ReactDOM и response-intl как
externals
и добавил их как peerDependencies
, а не как прямые зависимости create-react-app
для проекта
Я был возможность создать минимальный репозиторий репозитория, вот как воспроизвести мою проблему:
<cd somewhere>
git clone https://github.com/chakaz/repro-repo .
cd repro-lib
npm install
npm run build:dev
cd ../project
npm install
npm run start
У кого-нибудь есть идеи? Заранее спасибо!