NodeJS / Electron关于客户端/服务器代码的混淆

问题描述 投票:8回答:4

这是一个初学者的问题。我以前没有使用过NodeJS,所以对我来说有点混乱。我没有看到服务器模块和客户端模块之间的明确分离。看起来我可以使用“npm”(Node的包管理器)来安装客户端模块和服务器模块。

我的问题与此页面特别相关:http://electron.atom.io/docs/v0.36.8/api/synopsis/

它说我可以在客户端使用Node模块:

除了使用节点模块的额外功能外,渲染器过程与普通网页没有什么不同:

    <!DOCTYPE html>
    <html>
    <body>
    <script>
      const remote = require('electron').remote;
      console.log(remote.app.getVersion());
    </script>
    </body>
    </html>

这有什么用呢?节点在服务器端运行,浏览器(他们称之为“渲染器”进程)如何能够使用Node的包?

node.js electron
4个回答
3
投票

主进程和渲染器!=服务器和客户端

NodeJS是服务器端,而不是客户端。 在桌面应用程序上,您不必拥有服务器。但是使用电子,您可以在您的app中使用节点直接。

简单的方法:使用电子,将NodeJS视为一个工具箱来做很酷的事情。像Filesystem操作一样忘记了客户端和服务器的事情。

(你不能用jquery等做的事情,但桌面应用需要的东西)

Electron: Main Process and Renderer

主要过程是处理/创建BrowserWindows(渲染器)以及从一个渲染器 - 窗口到另一个渲染器的一些通信。 (也许还有其他一些特别的东西)

渲染器是您真正运行应用程序的最佳位置。通过节点,您可以获得所需的一切。在一个地方轻松调试(chrome dev工具)。

Node example in renderer

你可以要求qazxsw poi 从硬盘驱动器中读取文件或文件夹。

您可以通过“渲染器/浏览器”窗口显示的html文件(脚本标记)中的示例执行此操作。


这对我来说也很混乱,我的回答肯定不完美和完全正确。但我的提示是,尝试在渲染器中执行所有操作。当你必须使用主要过程时,你会注意到这一点。


1
投票

谢谢大家的回答。我想在阅读本页后我现在明白了:

"fs" > NodeJS File System

所以,我完全误解了Electron是什么。我认为它基本上是在NodeJS和Chromium浏览器上运行的HTTP服务器,所以我认为客户端和服务器之间的分离应该与创建网站时的分离相同。

然而,这根本不是它的原因。您似乎可以通过IPC(进程间通信)直接与服务器进行通信,因此它与HTTP客户端/服务器完全不同:

远程模块提供了一种在渲染器进程(网页)和主进程之间进行进程间通信(IPC)的简单方法。


0
投票

我认为他们想说的是你可以使用通常指定用于Node的模块在前端使用。由于Electron被设计用作桌面应用程序而不是浏览器,因此您可以更轻松地交换代码。

我不确定你什么时候想要使用它。我认为他们这样做是为了更容易地集成像bluebird.js这样的东西,这是一个我可以看到很容易在前端和后端包上使用的promise库,即使它主要用于NodeJS。

该代码向您展示的是您可以通过以下方式导入模块:

http://electron.atom.io/docs/v0.36.8/api/remote/

这是说用const remote = require('electron').remote; console.log(remote.app.getVersion()); 加载我的'服务器端'应用程序,现在让我通过('electron').remote调用这些包。您可能不是每个人都需要或想要使用它,但它可用。

我认为这个很棒的事情是如果你专门为Electron构建一个库,你可以用它来编写它,使它在服务器端和客户端更加无缝。如果你曾经使用它,这将是socket.io的工作方式。服务器端和客户端的语法几乎相同,但他们必须单独编写它们,因此一个服务器端工作,一个工作客户端。有了这个,就可以为所有内容使用相同的代码库。

虽然我再次确切地知道一个好的/完美的用例可能是什么。当然,我认为你可以在一边保留一个JSON商店,然后用一些整洁的进口拉进去,再次不确定它有多么有用。


0
投票

remote.app.bluebird他们说:

您可以在应用程序中使用Node.js模块。选择你最喜欢的npm模块。 npm目前提供世界上最大的开源代码存储库 - 能够使用维护良好且经过测试的代码,这些代码曾经被保留用于服务器应用程序,这是Electron的关键特性之一。

例如,要在应用程序中使用官方AWS SDK,首先要将其作为依赖项安装:

official electron tutorial

然后,在您的Electron应用程序中,要求并使用该模块,就像您正在构建Node.js应用程序一样:

npm install --save aws-sdk

通过这种方式,Electron与普通Web应用程序的不同之处在于,您不能仅使用npm中的某个节点模块来完成工作。

正如官方电子教程中指出的那样“这是Electron的关键特性之一”。因为它使解决某些问题变得更容易。

想象一下,例如,你想要写一个简单的降价应用程序。有一个名为// A ready-to-use S3 Client const S3 = require('aws-sdk/clients/s3') 的节点模块。使用Electron,你可以直接从客户端/渲染过程代码中直接使用它,就像在markdown-it中一样。

© www.soinside.com 2019 - 2024. All rights reserved.