将 React-Native 应用程序分解为可插入模块
Breaking a React-Native application into plugable modules
我想编写一个 React-Native 应用程序。我希望能够在 运行 时间在设备上下载新模块以扩展功能。将有一些核心逻辑知道如何根据某些表单输入(如 dbs)请求新模块。我不想将所有东西都捆绑到一个单一的整体包中,我相信现在内置的打包器会发生这种情况。
这类似于 RequireJS 在浏览器中的工作方式。我需要知道的是:
- 如何构建独立模块? react-native bundle 似乎不允许我 select 从哪个根模块开始并且只适用于根项目
- 如何在 运行 时请求将新功能注入当前 JavaScript 环境?
React native 从指向一个 JS 包开始。这意味着您至少必须重新启动应用程序才能重新加载 js 包(假设您是从服务器而不是 ios 设备本身读取它)。
如果您确实有办法更新服务器上的 js 文件(通过某种基于用户所做的更新的 Web 服务),那么重新启动应用程序理论上可以重新加载 JS 并为应用程序。
我只能在 JS 中获得与此非常接近的东西。首先,我必须在当前的 react-native 捆绑器中公开更多选项,主要是 url(更改 "main" 模块)和黑名单(避免在第二个捆绑包中捆绑 react-native)包装器的选项(http://github.com/facebook/react-native/blob/master/packager/README.md)。
然后我不得不编写一个自定义获取程序来下载第二个包并使用 eval()
在当前环境中对其进行评估。
一个问题是我必须在第一个包中添加 __d('react-native',[],require('react-native'))
,我认为它的工作方式类似于 require.js 中的 define()
。这会将 'react-native' 导出为一个未损坏的名称,我插入的模块可以通过正常的 require() 语句访问该名称。起初有点令人困惑,但据我所知,React-native 打包器的工作方式有点像 r.js(参见 http://requirejs.org/docs/optimization.html)。
我想编写一个 React-Native 应用程序。我希望能够在 运行 时间在设备上下载新模块以扩展功能。将有一些核心逻辑知道如何根据某些表单输入(如 dbs)请求新模块。我不想将所有东西都捆绑到一个单一的整体包中,我相信现在内置的打包器会发生这种情况。
这类似于 RequireJS 在浏览器中的工作方式。我需要知道的是:
- 如何构建独立模块? react-native bundle 似乎不允许我 select 从哪个根模块开始并且只适用于根项目
- 如何在 运行 时请求将新功能注入当前 JavaScript 环境?
React native 从指向一个 JS 包开始。这意味着您至少必须重新启动应用程序才能重新加载 js 包(假设您是从服务器而不是 ios 设备本身读取它)。
如果您确实有办法更新服务器上的 js 文件(通过某种基于用户所做的更新的 Web 服务),那么重新启动应用程序理论上可以重新加载 JS 并为应用程序。
我只能在 JS 中获得与此非常接近的东西。首先,我必须在当前的 react-native 捆绑器中公开更多选项,主要是 url(更改 "main" 模块)和黑名单(避免在第二个捆绑包中捆绑 react-native)包装器的选项(http://github.com/facebook/react-native/blob/master/packager/README.md)。
然后我不得不编写一个自定义获取程序来下载第二个包并使用 eval()
在当前环境中对其进行评估。
一个问题是我必须在第一个包中添加 __d('react-native',[],require('react-native'))
,我认为它的工作方式类似于 require.js 中的 define()
。这会将 'react-native' 导出为一个未损坏的名称,我插入的模块可以通过正常的 require() 语句访问该名称。起初有点令人困惑,但据我所知,React-native 打包器的工作方式有点像 r.js(参见 http://requirejs.org/docs/optimization.html)。