源码目录结构
Electron 的源代码主要依据 Chromium 的拆分约定被拆成了许多部分。
为了更好地理解源代码,您可能需要了解一下 Chromium 的多进程架构。
源代码的目录结构
Electron
├── build/ - Build configuration files needed to build with GN.
├── buildflags/ - Determines the set of features that can be conditionally built.
├── chromium_src/ - Source code copied from Chromium that isn't part of the content layer.
├── default_app/ - A default app run when Electron is started without
| providing a consumer app.
├── docs/ - Electron's documentation.
| ├── api/ - Documentation for Electron's externally-facing modules and APIs.
| ├── development/ - Documentation to aid in developing for and with Electron.
| ├── fiddles/ - A set of code snippets one can run in Electron Fiddle.
| ├── images/ - Images used in documentation.
| └── tutorial/ - Tutorial documents for various aspects of Electron.
├── lib/ - JavaScript/TypeScript source code.
| ├── browser/ - Main process initialization code.
| | ├── api/ - API implementation for main process modules.
| | └── remote/ - Code related to the remote module as it is
| | used in the main process.
| ├── common/ - Relating to logic needed by both main and renderer processes.
| | └── api/ - API implementation for modules that can be used in
| | both the main and renderer processes
| ├── isolated_renderer/ - Handles creation of isolated renderer processes when
| | contextIsolation is enabled.
| ├── renderer/ - Renderer process initialization code.
| | ├── api/ - API implementation for renderer process modules.
| | ├── extension/ - Code related to use of Chrome Extensions
| | | in Electron's renderer process.
| | ├── remote/ - Logic that handes use of the remote module in
| | | the main process.
| | └── web-view/ - Logic that handles the use of webviews in the
| | renderer process.
| ├── sandboxed_renderer/ - Logic that handles creation of sandboxed renderer
| | | processes.
| | └── api/ - API implementation for sandboxed renderer processes.
| └── worker/ - Logic that handles proper functionality of Node.js
| environments in Web Workers.
├── patches/ - Patches applied on top of Electron's core dependencies
| | in order to handle differences between our use cases and
| | default functionality.
| ├── boringssl/ - Patches applied to Google's fork of OpenSSL, BoringSSL.
| ├── chromium/ - Patches applied to Chromium.
| ├── node/ - Patches applied on top of Node.js.
| └── v8/ - Patches applied on top of Google's V8 engine.
├── shell/ - C++ source code.
| ├── app/ - 系统入口代码.
| ├── browser/ - 包含了主窗口、UI 和所有主进程相关的东西.
| | | 它会告诉渲染进程如何管理页面.
| | ├── ui/ - 不同平台上 UI 部分的实现.
| | | ├── cocoa/ - Cocoa 部分的源代码.
| | | ├── win/ - Windows GUI 部分的源代码.
| | | └── x/ - X11 部分的源代码.
| | ├── api/ - 主进程 API 的实现.
| | ├── net/ - 网络相关的代码.
| | ├── mac/ - 与 Mac 有关的 Objective-C 代码.
| | └── resources/ - 图标,平台相关的文件等.
| ├── renderer/ - 运行在渲染进程中的代码.
| | └── api/ - 渲染进程 API 的实现.
| └── common/ - 同时被主进程和渲染进程用到的代码,
| | 包括了一些用来将 node 的消息循环整合到 Chromium 的
| | 消息循环中时用到的工具函数和代码.
| └── api/ - 同时被主进程和渲染进程使用到的 API 的实现,
| 并且是 Electron 内置模块的基础.
├── spec/ - Components of Electron's test suite run in the renderer process.
├── spec-main/ - Components of Electron's test suite run in the main process.
└── BUILD.gn - Electron 的构建规则.
其它目录的结构
- .circleci - Config file for CI with CircleCI.
- .github - GitHub-specific config files including issues templates and CODEOWNERS.
- dist - 由脚本
script/create-dist.py
创建的临时发布目录. - external_binaries - 下载了不支持用
gn
构建的第三方框架的二进制文件. - node_modules - 在构建中用到的第三方 node 模块.
- npm - Logic for installation of Electron via npm.
- out -
ninja
的临时输出目录. - script - 用于诸如构建、打包、测试等开发用途的脚本等.
script/ - The set of all scripts Electron runs for a variety of purposes.
├── codesign/ - Fakes codesigning for Electron apps; used for testing.
├── lib/ - Miscellaneous python utility scripts.
└── release/ - Scripts run during Electron's release process.
├── notes/ - Generates release notes for new Electron versions.
└── uploaders/ - Uploads various release-related files during release.
- 工具 - Helper scripts used by GN files.
- Scripts put here should never be invoked by users directly, unlike those in
script
.
- Scripts put here should never be invoked by users directly, unlike those in
- typings - TypeScript typings for Electron’s internal code.
- vendor - Source code for some third party dependencies, including
boto
andrequests
.
让 Git 子模块保持最新
Electron信息库有一些被提供的依赖, 在 /vendor 目录中可以找到. 运行 git status
时,偶尔会看到这样的消息:
$ git status
modified: vendor/depot_tools (new commits)
modified: vendor/boto (new commits)
要更新这些被提供的依赖关系,运行以下命令:
git submodule update --init --recursive
如果您发现自己经常运行此命令, 你可以在 ~/.gitconfig
文件中创建一个别名:
[alias]
su = submodule update --init --recursive