TL; DR:我希望能require
react-native
RedBox
中的模块,并在模块不存在的情况下自行处理异常(而不是显示moment.js
)。
我在使用en-us
的逻辑时,在给定请求的区域设置时,从其预设库(https://github.com/moment/moment/tree/develop/locale)中选择最合适的区域设置。
例如,如果询问en
,但未找到,则会回退到chooseLocale
,依此类推。此逻辑的代码(loadLocale
,require
)可在此处找到:https://github.com/moment/moment/blob/develop/src/lib/locale/locales.js
基本上,它尝试require
给定的预设。如果它不存在,它将从react-native
语句中获取异常,捕获它并继续下一个选项。
现在,我的问题是尝试将此逻辑用于require
。 react-native
语句实际上是由guardedLoadModule
的{{1}}实现的,它处理异常(显示红色屏幕)。在我看来,moment
的逻辑并没有受到这种逻辑的影响,因此我希望RedBox
不显示。
有什么想法吗?
答案 0 :(得分:1)
React-native' s require
与node.js的require
不同,因为应用程序在应用程序运行之前已捆绑并打包。因此,无法执行动态require
语句。另请参阅this github issue。
检查react-native上的以下github问题,因为它包含一个"解决方案"你的问题。 https://github.com/facebook/react-native/issues/1629
换句话说:你必须自己实现回退机制,并明确告诉我们使用哪个语言环境。
switch deviceLocale:
case 'es':
require('moment/locale/es');
break;
case 'he':
require('moment/locale/he');
break;
答案 1 :(得分:0)
现在可以了 (link to discussion):
<块引用>可选依赖在 Metro 0.59 中发布
只需用 try
catch
包围您的代码:
let module;
try {
module = require('module');
} catch {
...
}