在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’,这会导致它抛出错误无法解决模块…. 有没有办法解决这个问题? 解决方法
你不能做动态导入.但是,因为React Native打包器使用
node-haste并且React和React Native都使用Haste
@providesModule声明,所以您可以按名称导入模块而无需指定位置:
require('ReactNativePropRegistry'); 我没有尝试过这个特定的模块,但理论上它应该可行. 可能很高兴知道RN的一些遥远的未来版本,打包器可能会通过包边界上的provideModule名称放弃对需要模块的支持,因此这可能不是永久解决方案. 但是,如果您正在使用库,最终您可以弃用对早于0.38的版本的支持.或者你可以这样做吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |