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

时间:2015-08-14 22:25:25

标签: javascript node.js react-native

我希望编写一个React-Native应用程序。我希望能够在设备上运行时下载新模块以扩展功能。会有一些核心逻辑知道如何基于某些表单输入(如dbs)请求新模块。我不想将所有内容捆绑到单个整体捆绑包中,这是我认为现在使用内置打包器发生的事情。

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

  1. 如何构建独立模块? react-native bundle似乎不允许我选择哪个根模块开始,只适用于根项目
  2. 如何在运行时请求将新功能注入当前的JavaScript环境?

2 个答案:

答案 0 :(得分:2)

通过指向JS包来反应本机启动。这意味着您至少必须重新启动应用程序才能重新加载js包(假设您正在从服务器而不是从ios设备本身读取它)。

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

答案 1 :(得分:0)

我只能在JS中获得与此非常接近的东西。首先,我必须在当前的react-native bundler中公开更多选项,主要是url(更改“main”模块)和黑名单(以防止在第二个bundle中捆绑react-native)选项到他们的packager({ {3}})。

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

一个问题是,我必须在第一个包中添加__d('react-native',[],require('react-native')),我认为它来自require.js,就像define()一样。这会将“react-native”导出为一个未插入的名称,我插入的模块可以通过普通的require()语句访问。起初有点令人困惑,但从我可以告诉他们React-native packager的工作方式有点像r.js(参见http://github.com/facebook/react-native/blob/master/packager/README.md)。