在本地反应

时间:2016-11-25 13:31:49

标签: react-native

我想在我的React Native包中导入ReactNativePropRegistry。

我曾经在React Native 0.38.0之前从'react/lib/ReactNativePropRegistry'导入它,但在React Native 0.38.0中它已更改为'react-native/Libraries/Renderer/src/renderers/native/ReactNativePropRegistry'

我想在所有React 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');
}

但似乎打包器试图静态解析模块。因此,即使reactNativeVersion小于0.38.0-rc.0,它也会尝试在此路径'react-native/Libraries/Renderer/src/renderers/native/ReactNativePropRegistry'处解析模块,导致它抛出错误Unable to resolve module ...

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

您无法进行动态导入。但是,因为React Native打包器使用node-haste并且React和React Native都使用Haste @providesModule声明,所以您可以按名称导入模块而不指定位置:

require('ReactNativePropRegistry');

我没有尝试过这个特定的模块,但理论上它应该可行。

可能很高兴知道RN的一些遥远的未来版本,打包者可能会在包边界上通过providesModule名称放弃对要求模块的支持,因此这可能不是永久解决方案。

但是,如果您正在使用库,那么最终您可以弃用对早于0.38的版本的支持。或者你可以这样做吗?