Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将React本机应用程序拆分为可插入模块_Javascript_Node.js_React Native - Fatal编程技术网

Javascript 将React本机应用程序拆分为可插入模块

Javascript 将React本机应用程序拆分为可插入模块,javascript,node.js,react-native,Javascript,Node.js,React Native,我想写一个React本机应用程序。我希望能够在运行时在设备上下载新模块以扩展功能。有一些核心逻辑知道如何基于某种表单输入(如dbs)请求新模块。我不想把所有东西都捆绑成一个单一的整体捆绑包,我相信现在内置的打包机就是这样 这类似于RequireJS在浏览器中的工作方式。我需要知道的是: 如何构建独立的模块?react native bundle似乎不允许我选择从哪个根模块开始,并且只在根项目上工作 如何在运行时请求将新功能注入当前JavaScript环境 React native从指向JS包开始

我想写一个React本机应用程序。我希望能够在运行时在设备上下载新模块以扩展功能。有一些核心逻辑知道如何基于某种表单输入(如dbs)请求新模块。我不想把所有东西都捆绑成一个单一的整体捆绑包,我相信现在内置的打包机就是这样

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

  • 如何构建独立的模块?react native bundle似乎不允许我选择从哪个根模块开始,并且只在根项目上工作
  • 如何在运行时请求将新功能注入当前JavaScript环境

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


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

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

    然后,我不得不编写一个定制的抓取程序,下载第二个包并使用
    eval()
    在当前环境中对其进行评估


    一个问题是,我必须在第一个包中添加
    \uud('react-native',[],require('react-native'))
    ,我认为它的工作方式类似于require.js中的
    define()
    。这会将“react native”导出为一个非混合名称,我插入的模块可以通过正常的require()语句访问该名称。一开始有点让人困惑,但我可以告诉他们,native packager的工作原理有点像r.js(请参阅)

    React Native的当前实现就是这样工作的。我甚至不需要更新jsbundle,因为他们已经通过在您启动示例应用程序时运行的打包程序提供了这种机制。只需保存我更新的节点模块,打包程序就会重新打包并为应用程序的新捆绑包提供服务。我想要的是启动一个类似于引导程序的功能,然后可以请求第二个包来扩展当前运行的react本机程序。据我所知,这是没有计划的,很难做到……不过我不是iOS专家。