Javascript Node.js在React Native中的角色是什么?

Javascript Node.js在React Native中的角色是什么?,javascript,react-native,Javascript,React Native,我试图了解React Native的开发过程,因此我找到了有关Metro的信息,然后我阅读/观看了以下视频): Metro是React Native的开发平台,它通过 公开一个HTTP服务器,这样客户端(在本例中)可以 与它通信,它还公开了一个Websocket服务器,因此它可以 将更新推送到客户端 文档中提到了运行在端口8081上的“React-Native Packager”(根据视频,现在称为Metro),例如,当我们键入React-Native-run android时,HTTP服务器启

我试图了解React Native的开发过程,因此我找到了有关Metro的信息,然后我阅读/观看了以下视频):

Metro是React Native的开发平台,它通过 公开一个HTTP服务器,这样客户端(在本例中)可以 与它通信,它还公开了一个Websocket服务器,因此它可以 将更新推送到客户端

文档中提到了运行在端口8081上的“React-Native Packager”(根据视频,现在称为Metro),例如,当我们键入React-Native-run android时,HTTP服务器启动

关于Websocket,我仍然需要

文档中说我们在两个环境中运行JavaScript代码,这取决于我们是否处于调试模式,我理解这一点。但这让我有点困惑,他说:

第4条您的代码没有在Node.JS上运行:您得到的JavaScript运行时是EtherJavaScriptCore(非调试)或V8(调试)。即使 虽然您可以使用NPM,并且节点服务器正在后台运行, 您的代码实际上并没有在Node.JS上运行。所以你不能 使用Node.JS包。一个典型的例子是jsonwebtoken,它 使用NodeJS的加密模块

然后,我读到了如下内容:

React Native使用Node.js(JavaScript运行时)来构建 JavaScript代码

js是一个服务器端JavaScript运行时环境 Native附带了一些为Node.js编写的工具

js是一个基于Chrome的JavaScript构建的开源平台 运行时间;它提供了一种轻松构建快速、可扩展的应用程序的方法 js允许您在终端中运行JavaScript,并提供帮助 创建模块

在这方面,它说:

从nodejs.org下载node.js。这个JavaScript运行时为您提供 访问npm,这是node.js创建的一个方便的工具 可用于管理开放源代码包的项目。确保 您下载的最新LTS(长期支持)版本 node.js此下载还包括一个开发服务器 称为Metro bundler,在调试时提供实时更新。

因此:

  • RN中Node.js的角色是只访问npm并管理包?Metro是否包含在Node.js中?我是不是遗漏了什么?多谢各位

在当今的环境中,您将编写四种类型的JavaScript:

1) 客户端浏览器JavaScript:

这就是当WebBrowser访问您的网页时发送给他们的内容,然后在客户端的浏览器中执行。由于您希望JS能够快速加载并在各种浏览器上运行,因此通常使用Transpiler将您编写的现代ESnext转换为具有更好支持的小型版本

2) 客户端本机JavaScript:

大多数设备都有本地JS运行时,因此您可以将JS文件与Android/iOS/桌面应用程序一起发送,然后在那里启动它们。这些引擎还支持将JavaScript中的钩子添加到本机代码中,这就是React native提供API的方式

3) 服务器端节点JS JavaScript:

NodeJS是一个用于运行服务器的运行时

4) 在NodeJ上运行的构建脚本:

您可以使用JavaScript生成JavaScript文件。这就是捆绑(1)和(2)的文件的方式(也可能是(3))

现在,
metro
是一个服务器端构建脚本(在NodeJS上),您可以使用它来a)启动一个服务器,将您的JS作为网页(1和3)服务,或者b)将您的JS捆绑到一个本地应用程序中,您可以在设备上安装(2)

RN中Node.js的角色是只访问npm并管理包


不。
metro
本身就是一个包,您可以在NodeJS上运行。

嗨,Jonas,我对您的回答的理解是metro是使用Node构建的,用于启动为React本机应用程序服务的服务器。两个问题:1)Metro仅在模拟器中运行应用程序时使用,还是在现场运行时使用?2) 我知道地铁在8081端口运行。至少在调试模式下,Metro服务器与仿真器位于同一台计算机上。既然服务器与仿真器位于同一台机器上,为什么需要使用端口?端口不仅仅用于不同机器之间的通信吗?@gkeenley不,它们还可以用于机器上不同服务之间的通信。我还没有广泛使用Metro,所以我无法回答其他问题…好的,谢谢。你知道在什么情况下,同一台机器上的两个服务会通过端口进行通信而不是通过端口进行通信吗?@gkeenley它们通常用于可以在独立机器上运行的服务,例如数据库、服务器等。就像我有一个程序a与服务B进行通信一样,在某些情况下,a和B在不同的机器上,如果A和B碰巧在同一台机器上,它们可能仍然使用端口进行通信?