草庐IT

javascript - 在另一个内部动态编译和运行 native react 应用程序

coder 2024-07-20 原文

我需要创建一个包含其他应用程序并可以运行它们的移动应用程序。它基本上就像一个“应用程序中心”,其中有一个应用程序列表(我们在我们的服务器上发布),用户可以打开其中一个应用程序,从而打开该应用程序。

想想Expo's app ,用户可以扫描他的应用程序的二维码,它会自动编译和打开,这接近我想要的功能。

可以打开的应用程序是使用 react-native 创建的,并存储在 Gitlab 的 GIT 存储库中。

考虑以下示例:

通过启动我们称为App Center 的应用程序,将显示一个应用程序列表。当用户点击其中之一时,它将在内部打开。


这是一个“更技术性”的例子:

  1. 应用中心启动
  2. 该应用将从服务器获取要显示的应用列表,例如通过调用 https://myappcenterserver.com/all-apps
  3. 它们将被显示并且它会监听新闻事件
  4. 假设用户按下了一个名为 1st App (我知道这是一个非常糟糕的名字) 的应用程序,它的 ID AP123
  5. 我们的应用程序将通过调用 https://myappcenterserver.com/app/AP123 向服务器发送请求, 这将从 Git 存储库返回应用程序的 native 源代码
  6. 我们的应用中心将编译第 5 步的代码并运行它

所以根据您的说法,我应该考虑哪种方法是最好的。

我应该使用远程代码解决方案,例如 CodePush 还是 react-native-dynamic-bundle ?它们适合这种情况吗?

最佳答案

这部分可以通过 CodePush 实现:

  • 为不同的应用创建多个 CodePush 环境。 (APP1 APP2 等)
  • 当您启动您的应用时,进行 API 调用以获取应用列表和相应的代码推送部署 key 。
  • 在按钮上单击 codepush.sync(deployment_key) → 重新启动应用程序然后直接跳转到您的应用程序(可能将应用程序名称存储在 AsyncStorage 中并通过导航直接跳转到它)

但是,警告可能会破坏交易:

  • 您的应用将在选择应用后重新加载
  • 主要的 React 版本升级( native java/oc 更改)将需要商店发布,因为它无法通过 JS 处理(可能不会破坏交易)

还有一个更好的方法:

  • 创建一个容器应用程序和一个 CodePush 环境
  • 有一个中央配置,如 [{app:"A1", version: 2.0.0}, {app: "A2", version: 1.2.0}]
  • 所有其他应用 A1、A2、A3 公开对象,这些对象可以作为插件公开给容器应用。
  • 您的 CI 处理从多个存储库动态构建应用程序(或更好 - 由不同存储库生成的多个 npm 包)并将 JS 推送到 CodePush 服务器。
  • 它将配置中的所有应用程序(bash 脚本添加到 yarn add A1、yarn add a2、yarn add a3)添加到容器中,
  • 您的应用读取配置并加载 A1 A2 等。
  • CD 创建新的 CodePush 版本。

只要中央配置发生变化(比如在 A1 发布 npm 包后他们更新中央配置),就会重复此操作。

它解决了重新启动的问题,因为您已将所有 bundle 构建到一个。

代码推送: https://learn.microsoft.com/en-us/appcenter/distribution/codepush/react-native#dynamic-deployment-assignment

或者去你可能想通过世博会的代码https://github.com/expo/expo/blob/d56076241cef55b0a93a5c0bb8dc690270e42dcb/home/screens/QRCodeScreen.android.js#L89

关于javascript - 在另一个内部动态编译和运行 native react 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57252070/

有关javascript - 在另一个内部动态编译和运行 native react 应用程序的更多相关文章

  1. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  2. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  3. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  4. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  7. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  8. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  9. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  10. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

随机推荐