Shi*_*nai 2 javascript architecture electron
这是一个有点开放的问题,但是,制作一个好的可扩展电子应用程序的好方法是什么?VSCode、Atom 和许多其他人支持扩展,但他们的代码库太大,我无法理解正在发生的事情。我对 Jupyterlab 感到非常惊讶,据他们说,它包含一个小核心,其他一切都只是它上面的扩展。所以我想知道如何构建这些应用程序。
我的具体问题是:
Electron 是 BYOEF(自带扩展框架),这意味着 Electron 中没有对扩展的内置支持(是的,我编造了这个词)。VS Code 和 Atom 已经在 Electron 之上实现了自己的扩展层。
为了支持扩展,需要实现两个核心方面:
既然你提到了 VS Code,那么让我们仔细看看它是如何实现扩展的(这很可能被认为是可扩展架构事实上的最佳实践)。
您提到尝试查看源代码。正如您所提到的,VS Code 的代码库很大,但是与扩展相关的最重要的代码可以在src/vs/workbench/services/extensions/electron-browser文件夹中找到。
VS Code 将扩展作为npm模块分发。这允许每个扩展都依赖于其他 npm 模块,并允许 VS Code 轻松更新扩展(每次打开时都会这样做)。
当您选择安装扩展时,它会从VS Code 的 npm 存储库下载。安装了扩展的依赖项(通常会在安装 npm 包时自动发生)。该扩展导出一个activate函数,在完全安装扩展后由 VS Code 调用。
它还导出一个deactivate函数,以便可以干净地删除它。
VS Code 公开了一个用于扩展的 API。他们可以订阅事件来监听它们、调用公开的 API 函数、注册新的提供者或注册新命令以添加新功能。
您请求的示例实际上取决于您要尝试做什么以及您想如何做。
要添加按钮,您的主页必须查找已注册的按钮并将它们包含在页面上。在 VS Code 的做事方式中,每个扩展都会在activate()函数中注册他们的按钮,如果他们想这样做的话。
类似地,要在菜单栏中添加一个选项,您的 Electron 应用程序的菜单栏必须查找任何已注册的菜单扩展并用它们填充菜单栏。同样,扩展从不与 Electron API 交互,只与应用程序的 API 交互。您需要明确定义一个 API 并使扩展可以访问它(或者只是让整个 Electron API 可访问,但这会导致大混乱)。