将React-Native应用程序分解为可插入的模块

我正在寻找一个React-Native应用程序。 我希望能够在设备上运行时下载新模块以扩展function。 将会有一些核心逻辑知道如何基于某种forms的input请求新的模块,如dbs。 我不想将所有东西都捆绑到一个单一的捆绑包中,而这正是我现在用内置的包装器发生的事情。

这与RequireJS在浏览器中的工作方式类似。 我需要知道的是:

  1. 我如何构build独立的模块? react-native bundle似乎不允许我select哪个根模块开始,只能在root项目上工作
  2. 我如何在运行时请求将新function注入到当前的JavaScript环境中?

React native通过指向一个JS包开始。 这意味着你至less不得不重新启动应用程序来重新加载js包(假设你是从服务器而不是从ios设备本身读取的)。

如果您确实有办法更新服务器上的js文件(通过基于用户所做更新的某种Web服务),那么重新启动应用程序理论上可以重新加载JS并为应用程序提供新function。

我只能在JS中获得一些非常接近的东西。 首先,我必须在当前react-native bundler中公开更多的选项,主要是url(更改“main”模块)和黑名单(以防止捆绑react-native在第二个bundle中)选项到它们的包装器( http ://github.com/facebook/react-native/blob/master/packager/README.md )。

然后,我必须编写一个自定义的获取器,下载第二个包,并使用eval()在当前环境中对其进行评估。

唯一的问题是我必须在第一个bundle中添加__d('react-native',[],require('react-native')) ,我认为它的工作方式就像require.js中的define() 。 这个导出的“react-native”作为一个不受限制的名称,我插入的模块可以通过正常的require()语句访问。 起初有点让人困惑,但是从我能告诉他们来看,React-native包装工程师有点像r.js(见http://requirejs.org/docs/optimization.html )。