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

2018-10-08 18:06 更新

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

Gyp 文件

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

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

創(chuàng)建組件

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

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

Minimal Bootstrapping

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

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

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

Two-Phase Project Generation

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

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

Target Names

與大多數(shù)的項(xiàng)目不同,它們使用 Release  Debug 作為目標(biāo)名字,而 Electron 使用使用的是 R  D.這是因?yàn)槿绻欢x了一個(gè) Release  Debug 構(gòu)建配置,gyp 會(huì)隨機(jī)崩潰,并且在同一時(shí)候,Electron 只生成一個(gè)目標(biāo),如上所述.

+

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)