在反应原生中有条件地加载模块

Joa*_*him 5 react-native

我正在努力使一个库在NodeJS和ReactNative上工作.ReactNative不支持某些本机NodeJS模块,因此我尝试有条件地加载它们.但这不起作用:

if (true) {
    require('a'); // module 'a' works in ReactNative
} else {
    require('b'); // module 'b' doesn't work in ReactNative
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,BOTH要求声明广告执行并加载'b'抛出异常:(

现在我有以下选择:

  1. 要创建新版本的库,特定于ReactNative,仅使用在那里工作的模块.
  2. 我听说你可以在package.json中指定"react-native",这有助于解决这个问题.但是,我无法在任何地方找到文档,是否记录在某处?

一般来说,你会建议让我的库在Node和ReactNative中工作吗?

谢谢,

Joa*_*him 7

我想通了 - 这是使用package.json. 在那里你可以用另一个模块替换一个模块,或者为 ReactNative 禁用它(通过将其值设置为false)。如果您用另一个模块替换该模块,则该模块也应添加到依赖项列表中。

在上面的示例中,对于属性中的模块breact-native您必须将其设置false为值。

在 package.json 中,这可能如下所示:

"dependencies": {
  "c": "^1.0.0"
},
"react-native": {
  "a": "c",
  "b": false
}
Run Code Online (Sandbox Code Playgroud)

在 ReactNative 的情况下,上面的代码将用模块替换模块ac它将抑制模块的加载b(它看起来像一个空对象)。