源码目录结构

Electron 的源代码主要依据 Chromium 的拆分约定被拆成了许多部分。

为了更好地理解源代码,您可能需要了解一下 Chromium 的多进程架构

源代码的目录结构

  1. Electron
  2. ├── atom/ - C++ 源代码.
  3. | ├── app/ - 系统入口代码.
  4. | ├── browser/ - 包含了主窗口、UI 和所有主进程相关的东西.
  5. | | | 它会告诉渲染进程如何管理页面.
  6. | | ├── ui/ - 不同平台上 UI 部分的实现.
  7. | | | ├── cocoa/ - Cocoa 部分的源代码.
  8. | | | ├── win/ - Windows GUI 部分的源代码.
  9. | | | └── x/ - X11 部分的源代码.
  10. | | ├── api/ - 主进程 API 的实现.
  11. | | ├── net/ - 网络相关的代码.
  12. | | ├── mac/ - Mac 有关的 Objective-C 代码.
  13. | | └── resources/ - 图标,平台相关的文件等.
  14. | ├── renderer/ - 运行在渲染进程中的代码.
  15. | | └── api/ - 渲染进程 API 的实现.
  16. | └── common/ - 同时被主进程和渲染进程用到的代码,
  17. | | 包括了一些用来将 node 的消息循环整合到 Chromium
  18. | | 消息循环中时用到的工具函数和代码.
  19. | └── api/ - 同时被主进程和渲染进程使用到的 API 的实现,
  20. | 并且是 Electron 内置模块的基础.
  21. ├── chromium_src/ - Chromium 项目中拷贝来的代码. 参见下文。
  22. ├── default_app/ - 在没有提供应用程序的情况下
  23. | 启动 Electron 的默认页面.
  24. ├── docs/ - 文档.
  25. ├── lib/ - JavaScript 源代码.
  26. | ├── browser/ - Javascript 主进程初始化代码.
  27. | | └── api/ - Javascript API 实现.
  28. | ├── common/ - 主进程和渲染器进程使用的 JavaScript.
  29. | | └── api/ - Javascript API 实现.
  30. | └── renderer/ - Javascript 渲染器进程初始化代码.
  31. | └── api/ - Javascript API 实现.
  32. ├── native_mate/ - 复制了 Chromium gin 库, 使得更加便捷
  33. | 地在 C++ 类型和 JavaScript 类型之间转换.
  34. ├── spec/ - 自动化测试.
  35. └── BUILD.gn - Electron 的构建规则.

/chromium_src

/chromium_src 中的文件更多地是 Chromium 的片段而不是内容层面的部分。 例如要实现 Papper API, 我们需要一些类似官方 Chrome 一样的联接操作。 我们可能已经构建了相应的源文件作为 libcc 的一部分,但是多数时候我们不需要所有的特性 (一些用于专用和分析的东西), 所以我们采用其部分代码。 这些可能很容易在 libcc 中已经存在补丁,但在编写目标 libcc 时维护的补丁非常小,而 chromium_src 的变化往往很大。 另外请注意,这些补丁不像我们维护的其他 libcc 补丁,绝对不能推到上游。

其它目录的结构

  • script - 用于诸如构建、打包、测试等开发用途的脚本等.
  • tools - 在 gyp 文件中用到的工具脚本,但与 script 目录不同,该目录中的脚本不应该被用户直接调用.
  • vendor - 第三方依赖项的源代码,为了防止人们将它与 Chromium 源码中的同名目录相混淆,在这里我们不使用 third_party 作为目录名.
  • node_modules - 在构建中用到的第三方 node 模块.
  • out - ninja 的临时输出目录.
  • dist - 由脚本 script/create-dist.py 创建的临时发布目录.
  • external_binaries - 下载了不支持用 gn 构建的第三方框架的二进制文件.

让 Git 子模块保持最新

Electron信息库有一些被提供的依赖, 在 /vendor 目录中可以找到. 运行 git status 时,偶尔会看到这样的消息:

  1. $ git status
  2. modified: vendor/depot_tools (new commits)
  3. modified: vendor/boto (new commits)

要更新这些被提供的依赖关系,运行以下命令:

  1. git submodule update --init --recursive

如果您发现自己经常运行此命令, 你可以在 ~/.gitconfig 文件中创建一个别名:

  1. [alias]
  2. su = submodule update --init --recursive