Electron 構(gòu)建系統(tǒng)概覽

2018-10-08 18:06 更新

Electron 使用 gyp 來生成項目 ,使用 ninja 來構(gòu)建項目. 項目配置可以在 .gyp  .gypi 文件中找到.

Gyp 文件

下面的 gyp 文件包含了構(gòu)建 Electron 的主要規(guī)則 :

  • atom.gyp 定義了 Electron 它自己是怎樣被構(gòu)建的.
  • common.gypi 調(diào)整 node 的構(gòu)建配置,來讓它結(jié)合 Chromium 一起構(gòu)建.
  • vendor/brightray/brightray.gyp 定義了 brightray 是如何被構(gòu)建的,并且包含了默認配置來連接到 Chromium.
  • vendor/brightray/brightray.gypi 包含了常用的創(chuàng)建配置.

創(chuàng)建組件

在 Chromium 還是一個相當大的項目的時候,最后鏈接階段會花了好幾分鐘,這讓開發(fā)變得很困難. 為了解決這個困難,Chromium 引入了 "component build" ,這讓每個創(chuàng)建的組建都是分隔開的共享庫,讓鏈接更快,但是這浪費了文件大小和性能.

在 Electron 中,我們采用了一個非常相似的方法 : 在創(chuàng)建 Debug , 二進制文件會被鏈接進入一個 Chromium 組件的共享版本庫來達到快速鏈接; 在創(chuàng)建 Release, 二進制文件會被鏈接進入一個靜態(tài)版本庫, 所以我們可以有最小的二進制文件size和最佳的體驗.

Minimal Bootstrapping

在運行 bootstrap 腳本的時候,所有的 Chromium 預編譯二進制文件會被下載.默認靜態(tài)庫和共享庫會被下載,并且項目的最后大小會在 800MB 到 2GB 之間,這取決于平臺類型.

默認,libchromiumcontent 是從 Amazon Web Services 上下載下來的.如果設(shè)置了 LIBCHROMIUMCONTENT_MIRROR 環(huán)境變量,bootstrap腳本會從這里下載下來. libchromiumcontent-qiniu-mirror  libchromiumcontent 的映射.如果你不能連接 AWS,你可以切換下載路徑:export LIBCHROMIUMCONTENT_MIRROR=http://7xk3d2.dl1.z0.glb.clouddn.com/ 如果只是想快速搭建一個 Electron 的測試或開發(fā)環(huán)境,可以通過 --dev 參數(shù)只下載共享版本庫:

$ ./script/bootstrap.py --dev
$ ./script/build.py -c D

Two-Phase Project Generation

 Release  Debug 構(gòu)建的時候后,Electron 鏈接了不同配置的庫 .然而 gyp不支持為不同的配置文件進行不同的鏈接設(shè)置.

為了規(guī)避這個問題,Electron 在運行 gyp 的時候,使用了一個 gyp 的變量 libchromiumcontent_component來控制應(yīng)該使用哪個鏈接設(shè)置,并且只生成一個目標.

Target Names

與大多數(shù)的項目不同,它們使用 Release  Debug 作為目標名字,而 Electron 使用使用的是 R  D.這是因為如果只定義了一個 Release  Debug 構(gòu)建配置,gyp 會隨機崩潰,并且在同一時候,Electron 只生成一個目標,如上所述.

+

這只對開發(fā)者可用,如果想重新構(gòu)建 Electron ,將不會成功.

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號