# Build System Overview
Electron 使用 [gyp](https://gyp.gsrc.io/) 來生成項目 ,使用 [ninja](https://ninja-build.org/) 來構建項目. 項目配置可以在 `.gyp` 和 `.gypi` 文件中找到.
## Gyp 文件
下面的 `gyp` 文件包含了構建 Electron 的主要規則 :
* `atom.gyp` 定義了 Electron 它自己是怎樣被構建的.
* `common.gypi` 調整 node 的構建配置,來讓它結合 Chromium 一起構建.
* `vendor/brightray/brightray.gyp` 定義了 `brightray` 是如何被構建的,并且包含了默認配置來連接到 Chromium.
* `vendor/brightray/brightray.gypi` 包含了常用的創建配置.
## 創建組件
在 Chromium 還是一個相當大的項目的時候,最后鏈接階段會花了好幾分鐘,這讓開發變得很困難. 為了解決這個困難,Chromium 引入了 "component build" ,這讓每個創建的組建都是分隔開的共享庫,讓鏈接更快,但是這浪費了文件大小和性能.
在 Electron 中,我們采用了一個非常相似的方法 : 在創建 `Debug` , 二進制文件會被鏈接進入一個 Chromium 組件的共享版本庫來達到快速鏈接; 在創建 `Release`, 二進制文件會被鏈接進入一個靜態版本庫, 所以我們可以有最小的二進制文件size和最佳的體驗.
## Minimal Bootstrapping
在運行 bootstrap 腳本的時候,所有的 Chromium 預編譯二進制文件會被下載.默認靜態庫和共享庫會被下載,并且項目的最后大小會在 800MB 到 2GB 之間,這取決于平臺類型.
默認,`libchromiumcontent` 是從 Amazon Web Services 上下載下來的.如果設置了 `LIBCHROMIUMCONTENT_MIRROR` 環境變量,bootstrap腳本會從這里下載下來. [`libchromiumcontent-qiniu-mirror`](https://github.com/hokein/libchromiumcontent-qiniu-mirror) 是 `libchromiumcontent` 的映射.如果你不能連接 AWS,你可以切換下載路徑:`export LIBCHROMIUMCONTENT_MIRROR=http://7xk3d2.dl1.z0.glb.clouddn.com/`
如果只是想快速搭建一個 Electron 的測試或開發環境,可以通過 `--dev` 參數只下載共享版本庫:
```bash
$ ./script/bootstrap.py --dev
$ ./script/build.py -c D
```
## Two-Phase Project Generation
在 `Release` 和 `Debug` 構建的時候后,Electron 鏈接了不同配置的庫 .然而 `gyp`不支持為不同的配置文件進行不同的鏈接設置.
為了規避這個問題,Electron 在運行 `gyp` 的時候,使用了一個 `gyp` 的變量 `libchromiumcontent_component`來控制應該使用哪個鏈接設置,并且只生成一個目標.
## Target Names
與大多數的項目不同,它們使用 `Release` 和 `Debug` 作為目標名字,而 Electron 使用使用的是 `R` 和 `D`.這是因為如果只定義了一個 `Release` 或 `Debug` 構建配置,`gyp` 會隨機崩潰,并且在同一時候,Electron 只生成一個目標,如上所述.
這只對開發者可用,如果想重新構建 Electron ,將不會成功.
- 介紹
- 常見問題
- Electron 常見問題
- 向導
- 支持平臺
- 分發應用
- 提交應用到 Mac App Store
- 打包應用
- 使用 Node 原生模塊
- 主進程調試
- 使用 Selenium 和 WebDriver
- 使用開發人員工具擴展
- 使用 Pepper Flash 插件
- 使用 Widevine CDM 插件
- 教程
- 快速入門
- 桌面環境集成
- 在線/離線事件探測
- API文檔
- 簡介
- 進程對象
- 支持的 Chrome 命令行開關
- 環境變量
- 自定義的 DOM 元素
- File 對象
- <webview> 標簽
- window.open 函數
- 在主進程內可用的模塊
- app
- autoUpdater
- BrowserWindow
- contentTracing
- dialog
- globalShortcut
- ipcMain
- Menu
- MenuItem
- powerMonitor
- powerSaveBlocker
- protocol
- session
- webContents
- Tray
- 在渲染進程(網頁)內可用的模塊
- desktopCapturer
- ipcRenderer
- remote
- webFrame
- 在兩種進程中都可用的模塊
- clipboard
- crashReporter
- nativeImage
- screen
- shell
- 開發
- 代碼規范
- 源碼目錄結構
- 與 NW.js(原 node-webkit)在技術上的差異
- 構建系統概覽
- 構建步驟(OS X)
- 構建步驟(Windows)
- 構建步驟(Linux)
- 在調試中使用 Symbol Server