源代码目录结构
🌐 Source Code Directory Structure
Electron 的源代码被分成几个部分,主要遵循 Chromium 的分离惯例。
🌐 The source code of Electron is separated into a few parts, mostly following Chromium on the separation conventions.
你可能需要熟悉Chromium的多进程架构,以更好地理解源代码。
🌐 You may need to become familiar with Chromium's multi-process architecture to understand the source code better.
项目结构
🌐 Project structure
Electron 是一个包含多个上游依赖的复杂项目,这些依赖通过 DEPS 文件在源代码管理中进行跟踪。在初始化本地 Electron 检出 时,Electron 的源代码只是项目根目录下众多嵌套文件夹中的一个。
🌐 Electron is a complex project containing multiple upstream dependencies, which are tracked in source
control via the DEPS file. When
initializing a local Electron checkout, Electron's source code is just one
of many nested folders within the project root.
该项目包含一个单独的 src 文件夹,对应于 Chromium 的 src 文件夹 的特定 git 检发布本。此外,Electron 的仓库代码包含在 src/electron 中(拥有自己的嵌套 git 仓库),其他 Electron 特定的第三方依赖(例如 nan 或 node)位于 src/third_party 中(以及所有其他 Chromium 第三方依赖,例如 WebRTC 或 ANGLE)。
🌐 The project contains a single src folder that corresponds to a specific git checkout of
Chromium's src folder. In addition, Electron's
repository code is contained in src/electron (with its own nested git repository), and other
Electron-specific third-party dependencies (e.g. nan or
node) are located in src/third_party (along with all other
Chromium third-party dependencies, such as WebRTC or ANGLE).
对于 src/electron 之外的所有代码,Electron 特定的代码更改通过 git 补丁来维护。
更多信息请参阅 补丁 开发指南。
🌐 For all code outside of src/electron, Electron-specific code changes are maintained via git patches.
See the Patches development guide for more information.
Project Root
└── src
├── electron
├── third_party
│ ├── nan
│ ├── electron_node
│ └── ...other third party deps
└── ...other folders
Electron 源代码的结构
🌐 Structure of Electron source code
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.
| ├── 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.
| ├── node/ - Initialization code for Node.js in the main process.
│ ├── preload_realm/ - Initialization code for sandboxed renderer preload scripts.
│ │ └── api/ - API implementation for preload scripts.
| ├── renderer/ - Renderer process initialization code.
| | ├── api/ - API implementation for renderer process modules.
| | └── 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.
│ ├── utility/ - Utility process initialization code.
│ │ └── api/ - API implementation for utility process modules.
| └── 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/ - System entry code.
| ├── browser/ - The frontend including the main window, UI, and all of the
| | | main process things. This talks to the renderer to manage web
| | | pages.
| | ├── ui/ - Implementation of UI stuff for different platforms.
| | | ├── cocoa/ - Cocoa specific source code.
| | | ├── win/ - Windows GUI specific source code.
| | | └── x/ - X11 specific source code.
| | ├── api/ - The implementation of the main process APIs.
| | ├── net/ - Network related code.
| | ├── mac/ - Mac specific Objective-C source code.
| | └── resources/ - Icons, platform-dependent files, etc.
| ├── renderer/ - Code that runs in renderer process.
| | └── api/ - The implementation of renderer process APIs.
| ├── common/ - Code that used by both the main and renderer processes,
| | | including some helper functions and code to integrate node's
| | | message loop into Chromium's message loop.
| | └── api/ - The implementation of common APIs, and foundations of
| | Electron's built-in modules.
│ ├── services/node/ - Provides a Node.js runtime to utility processes.
│ └── utility - Code that runs in the utility process.
├── spec/ - Components of Electron's test suite run in the main process.
├── typings/ - Internal TypeScript types that aren't exported in electron.d.ts.
└── BUILD.gn - Building rules of Electron.
其他 Electron 目录的结构
🌐 Structure of other Electron directories
- .github - GitHub 特定的配置文件,包括问题模板、使用 GitHub Actions 的持续集成以及 CODEOWNERS。
- dist -
script/create-dist.py脚本在创建分发包时生成的临时目录。 - node_modules - 用于构建的第三方节点模块。
- npm - 通过 npm 安装 Electron 的逻辑。
- out -
siso的临时输出目录。 - 脚本 - 用于开发目的的脚本,如构建、打包、测试等。
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.
- typings - Electron 内部代码的 TypeScript 类型定义。