是否有可能在React Native中填充Node的fs.readFileSync()?

我想将许多为NodeJS编写的软件包移植到React Native。

为此,我使用stream行的Ignite样板创build了一个RN项目,然后使用了ReactNativify方法和shim节点API对象,主要是重用现有的browserify垫片 。

(有关详细信息和一些有用的提示,请参阅我们可以在反应原生应用程序中使用nodejs代码吗?

一些节点对象在编译后仍然被空的模拟replace,比如fs 。 在.babelrc做如下:

  ["module-resolver", { "alias": { "fs": "./config/mock", "sodium-universal": "libsodium" // etcetera } }] 

包到端口包含了一些调用fs.readFileSync的传递依赖。

比如在其中的一个hypercore-protocol ,有这样一行代码:

 module.exports = protobuf(fs.readFileSync(path.join(__dirname, 'schema.proto'), 'utf-8')) 

这是一个问题,因为Android和iOS不支持同步文件传输。 这条线看起来对我来说是un-shim-able

现在,虽然存在fs 反应 : react-native-level-fs,它并不实现同步文件系统方法。

然后有brfs转换,如brfs“browserify fs.readFileSync()静态资产inliner” (及其替代bfrs-babelbabel-plugin-static-fs )。

但我不知道如何包括他们,如果他们甚至会在RN工作?

所以我看到了四种方法:

  1. find一种方法将react-native-level-fsbrfs合并成一个可用的垫片更换
  2. 写一个全新的fs垫片,有所有的方法
  3. 如果同步fs不可能(我认为是这样),那么以某种方式覆盖遍及调用同步方法的传递依赖关系树中的所有函数,并将其replace为本地代码库中的js代码片段
  4. 如果出现的次数太多,则确定软件包无法移植到React Native

我希望1.或者3.是工作解决scheme。 任何人都可以build议吗?

为了完整性。 我正处于人生的这个阶段:

 System platform linux arch x64 cpu 4 cores Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz JavaScript node 7.10.1 /usr/local/bin/node npm 4.2.0 /usr/local/bin/npm yarn 0.24.6 /usr/bin/yarn React Native react-native-cli 2.0.1 app rn version 0.45.1 Ignite ignite 2.0.0 /usr/local/bin/ignite Android java 1.8.0_111 /usr/bin/java android home - undefined 

没有。对于Node的fs.readFileSync没有合理的select。

虽然在技术上可以编写一个阻塞asynchronous文件操作的readFileSync填充程序,但是在asynchronous系统中强制执行同步行为是不可取的(但是,如果只有一个同步方法,实时初始化代码)。

所以选项3或4是唯一可行的select。

在我的情况下,有太多的节点依赖关系,所以我放弃了浏览/ shimming,select了4。

这并不意味着一切都会丢失。 我现在正在研究将NodeJS编译为Android中的本机库

和Realm.io桥接Android胖客户端应用程序(CQRS风格)本地NodeJS + React Native )。