我正在努力使一个库在NodeJS和ReactNative上工作。 ReactNative不支持某些本机NodeJS模块,因此我尝试有条件地加载它们。然而,这并不起作用:
if (true) {
require('a'); // module 'a' works in ReactNative
} else {
require('b'); // module 'b' doesn't work in ReactNative
}
不幸的是,BOTH要求广告执行广告并加载' b'抛出异常:(
现在我有以下选择:
一般来说,您会建议让我的库在Node和ReactNative中工作吗?
谢谢,
答案 0 :(得分:4)
我想通了 - 这是使用" react-native" package.json
中的财产。在那里,您可以将模块替换为另一个模块,或者为ReactNative禁用它(通过将其值设置为false
)。如果将模块替换为另一个模块,则该模块也应添加到依赖项列表中。
在上面的示例中,对于b
属性中的模块react-native
,您必须将false
设置为值。
在package.json中,这可能如下所示:
"dependencies": {
"c": "^1.0.0"
},
"react-native": {
"a": "c",
"b": false
}
如果是ReactNative,上面的代码会将模块a
替换为模块c
,它将禁止加载模块b
(它看起来像一个空对象)。
答案 1 :(得分:1)
您可以尝试以下代码:
if (true)
{
/* this module will get bundled in react-native app */
require('a'); // module 'a' works in ReactNative
} else {
let b = 'b'
/* this module will not get bundled in react-native app */
require(b); // module 'b' doesn't work in ReactNative
}
在执行js包之前,需要('一个&#39)
包装在包中。在运行时它不需要。 react-native维护所有必需模块的映射 通常用id。
让b =' b'
要求(b)中
就像一个动态需求,它不是由packager捆绑而来的 在运行时请求。然后它会在其映射中搜索此模块,因为此映射将不具有此模块,因此react-native将引发错误。
注意:强> 在你的情况下
如果(真)
是一个永远不会执行if if-else的else部分的条件,所以react-native永远不会像找不到模块那样抛出错误。
答案 2 :(得分:0)
您可以使用此示例中的代码。
appdirs==1.4.3
backports-abc==0.5
bokeh==0.12.4
certifi==2017.1.23
futures==3.0.5
Jinja2==2.9.5
MarkupSafe==1.0
numpy==1.12.1
packaging==16.8
pyparsing==2.2.0
python-dateutil==2.6.0
PyYAML==3.12
requests==2.13.0
singledispatch==3.4.0.3
six==1.10.0
tornado==4.4.2