2016-11-25 3 views
2

Я хочу импортировать ReactNativePropRegistry в свой пакет React Native.Устранить модуль условно в ответном нативном

Раньше он использовал его у 'react/lib/ReactNativePropRegistry' до того, как React Native 0.38.0, но он был изменен на 'react-native/Libraries/Renderer/src/renderers/native/ReactNativePropRegistry' in React Native 0.38.0.

Я хочу, чтобы мой пакет будет поддерживаться на всех Реагировать Native версии, включая 0.38.0, так что я сделал это

if(semver.gte(reactNativeVersion, '0.38.0-rc.0')) { 
    const ReactNativePropRegistry = require('react-native/Libraries/Renderer/src/renderers/native/ReactNativePropRegistry'); 
} else { 
    const ReactNativePropRegistry = require('react/lib/ReactNativePropRegistry'); 
} 

Но, похоже, что упаковщик пытается разрешить модули статически. Таким образом, даже если responseNativeVersion меньше 0,38.0-rc.0, он пытается разрешить модуль по этому пути 'react-native/Libraries/Renderer/src/renderers/native/ReactNativePropRegistry', из-за чего он вызывает ошибку Unable to resolve module ....

Есть ли способ обойти это?

ответ

1

Динамический импорт невозможен. Однако, поскольку Реагировать Native упаковщик использует node-haste и оба React и React Native использовать Поспешность @providesModule декларации, вы можете быть в состоянии импортировать модуль по имени без указания местоположения:

require('ReactNativePropRegistry'); 

Я не пробовал его этот конкретный модуль, но теоретически он должен работать.

Возможно, было бы хорошо знать, что какая-то отдаленная будущая версия RN, упаковщик может отказаться от поддержки требуемых модулей именем providesModule через границы пакетов, поэтому это может быть не постоянное решение.

Однако, если вы работаете с библиотекой, в конечном итоге вы можете просто отказаться от поддержки версий старше 0.38. Или вы могли это сделать уже?

Смежные вопросы