【问题标题】:Breaking a React-Native application into plugable modules将 React-Native 应用程序分解为可插入模块
【发布时间】:2015-11-08 06:23:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript node.js react-native


    【解决方案1】:

    React Native 首先指向一个 JS 包。这意味着您至少必须重新启动应用程序才能重新加载 js 包(假设您是从服务器而不是从 ios 设备本身读取它)。

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

    【讨论】:

    • 这就是当前 React-Native 实现的工作方式。我实际上什至不需要更新 jsbundle,因为他们已经通过他们的打包程序提供了这种机制,当您启动他们的示例应用程序时运行该机制。只需保存我更新的节点模块,打包程序将重新打包并将新捆绑包提供给应用程序。我正在寻找的是能够启动类似引导程序的功能,然后可以请求第二个捆绑包来增强当前正在运行的 react-native 程序。
    • 据我所知,这是计划外的,而且很难做到……不过我不是 iOS 专家。
    【解决方案2】:

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

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

    一个问题是我必须在第一个包中添加__d('react-native',[],require('react-native')),我认为它的工作方式类似于require.js 中的define()。这会将“react-native”导出为我插入的模块可以通过正常的 require() 语句访问的未损坏名称。一开始有点令人困惑,但据我所知,他们 React-native 打包器的工作方式有点像 r.js(参见 http://requirejs.org/docs/optimization.html)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 2020-06-01
      • 2021-01-14
      • 1970-01-01
      相关资源
      最近更新 更多