2016-11-25 62 views
2

我想在我的React Native包中導入ReactNativePropRegistry。在反應本機中有條件地解析模塊

我曾經在React Native 0.38.0之前將它從'react/lib/ReactNativePropRegistry'導入,但它在React Native 0.38.0中更改爲'react-native/Libraries/Renderer/src/renderers/native/ReactNativePropRegistry'

我要支持所有的陣營原生版本,包括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'); 
} 

但似乎打包嘗試靜態解析模塊。因此,即使reactNativeVersion小於0.38.0-rc.0,它也會嘗試在此路徑上解析模塊'react-native/Libraries/Renderer/src/renderers/native/ReactNativePropRegistry',從而導致它引發錯誤Unable to resolve module ...

有沒有辦法解決這個問題?

回答

1

你不能做動態導入。然而,由於本土做出反應打包使用node-haste兩者作出反應和應對本地使用急速@providesModule聲明,您可以通過名稱來導入模塊,而無需指定位置:

require('ReactNativePropRegistry'); 

我還沒有嘗試過的這個特定的模塊,但理論上它應該工作。

可能很高興知道RN的一些遙遠的未來版本,包裝商可能會因包裝邊界上的providesModule名稱而失去對所需模塊的支持,因此這可能不是永久性解決方案。

但是,如果您正在使用庫,最終只能棄用對0.38以前版本的支持。或者你可以這樣做嗎?