【问题标题】:What is the role of Node.js in React-Native?Node.js 在 React-Native 中的作用是什么?
【发布时间】:2019-03-17 12:10:41
【问题描述】:

我正在尝试了解 React-Native 的开发过程,所以我找到了有关 Metro 的信息,然后我阅读/观看了这个Metro 视频):

Metro 是 React Native 的开发平台,它通过 暴露 HTTP 服务器 以便客户端,在这种情况下,模拟器可以 与它通信,它还公开了一个 Websocket 服务器,因此它可以 将更新推送到客户端。

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

关于 Websocket 我还需要read more

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

没有。 4 你的代码不能在 Node.JS 上运行:你拥有的 JavaScript 运行时是 ether JavaScriptCore(非调试)或 V8(调试)。甚至 虽然你可以使用 NPM 并且一个节点服务器在后台运行, 您的代码实际上并未在 Node.JS 上运行。所以你将无法 使用 Node.JS 包。一个典型的例子是 jsonwebtoken,它 使用 NodeJS 的加密模块。

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

React Native 使用 Node.js(一个 JavaScript 运行时)来构建您的 JavaScript 代码。

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

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

在这个article 中,它说:

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

所以:

  • Node.js在RN中的作用是只访问npm和管理包? Metro 是否包含在 Node.js 中?我错过/混淆了什么吗?谢谢。

【问题讨论】:

    标签: javascript react-native


    【解决方案1】:

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

    1) 客户端浏览器 JavaScript:

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

    2) 客户端原生 JavaScript:

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

    3) 服务器端 NodeJS JavaScript:

    NodeJS 是用于运行服务器的运行时。

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

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

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

    Node.js 在 RN 中的作用是只访问 npm 和管理包?

    没有。 metro 本身就是一个包,然后您可以在 NodeJS 上运行。

    【讨论】:

    • 您好 Jonas,我对您的回答的理解是 Metro 是使用 Node 构建的,用于启动为 React Native 应用程序提供服务的服务器。两个问题: 1) Metro 是仅在模拟器中运行应用程序时使用,还是在您也实时运行时使用? 2) 我知道 Metro 在 8081 端口上运行。至少在调试模式下,Metro 服务器与模拟器在同一台机器上。鉴于服务器与模拟器在同一台机器上,为什么需要使用端口?端口不只是用于不同机器之间的通信吗?
    • @gkeenley 不,它们也可用于在您机器上的不同服务之间进行通信。虽然我没有广泛使用 Metro,所以我无法真正回答其他问题......
    • 好的,谢谢。你知道在什么情况下同一台机器上的两个服务会通过端口通信还是不通过端口通信?
    • @gkeenley 它们通常用于可以在独立机器上运行的服务,例如数据库、服务器等
    • 如果我有程序 A 与服务 B 通信,并且在某些情况下 A 和 B 在不同的机器上,如果 A 和 B 碰巧在同一台机器上,它们可能仍然使用端口来沟通?
    猜你喜欢
    • 2021-04-04
    • 2020-04-28
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多