Electron 结合 Node.js 和 Chromium 上下文意味着什么?

What does it mean for Electron to combine Node.js and Chromium contexts?

作者在 a blog post 中提到 Electron 将 Node 和 Chromium 结合成一个 "single context" 这意味着我们不必使用 Browserify 来转换代码。

我了解 Electron 的意义之一是您可以使用 Web 技术构建跨平台桌面应用程序。我也理解我们能够写入文件系统的原因是因为 Electron 内置了 Node。另外,我们能够使用 HTML/CSS/JS/DevTools 的原因是因为 Chromium 内置了。但是,我不知道没想到作者说的是这个

Chromium 是一款基于 Webkit 的 Web 浏览器,具有 V8 javascript 引擎。它支持所有常用的浏览器和 DOM API,因此适合制作网页而不擅长与底层系统交互。

Node.js 是通过剥离 V8 引擎、制作无头命令行应用程序并添加大量 API 来访问文件系统而构建的,require() 其他文件,运行 其他 shell 程序等(您对真正的脚本语言的期望。

Electron 以一种简化的方式尝试用更通用的新引擎 Node.js 替换 Chromium 中使用的 V8 引擎。它向 node.js 公开了一些额外的 API,以允许打开 Chromium windows,但也允许使用 <script> 打开每个 Chromium window 标签将用 node.js 引擎解释它。

为什么选择 Electron? Chromium 本身不能做到这一点的原因是因为它最初被设计成一个网络浏览器,而在网络浏览器中文件系统 API 是闻所未闻的的文件通常托管在远程服务器上,访问用户计算机上的文件会存在安全风险(因为为什么任何一个网页都可以访问您的所有文件?)。

require 语句现在开箱即用,因为 node.js 具有文件系统支持,允许它们从磁盘同步读取,而不需要将它们捆绑到同一个 javascript文件或从服务器请求它们。

所以在正常情况下,Node.js 和网络浏览器是两个独立的上下文,这就是为什么通常必须使用 Browserify 来 'compile' 与 Node.js 代码一起使用网络浏览器。

与 PHP 脚本相同,需要 Web 服务器的某种处理程序才能在 Web 浏览器中正确执行。与 HTML & CSS 甚至 JavaScript 相比,无需任何进一步干预即可在网络浏览器中执行,因为网络浏览器已经包含解析 HTML 和解释和 运行 JS。

对于 Electron,现代 Web 浏览器的执行方式有点相同 JavaScript。使用 Electron,Chromium 已被修改为能够执行 Node。 Electron Browserify,Electron 是允许 Node.js 和 Chromium 一起工作的容器,无需任何进一步的修改或干预。

所以说 Node 和 Chromium 已经合并到一个上下文中,这意味着 Node 和 Chomium 能够像一体一样工作和交互,而不需要任何其他工具或步骤来'link' 两人在一起。