用electron自己的nodejs写的depot_tools 工具下载 构建源码

参考自:https://github.com/electron/build-tools

1,预先安装

需要git,python,nodejs,yarn。

(git需要git.exe在路径上,而不是google的depot tools里面的git.bat。那样python就不能运行git了,需要加上shell=ture)

可以用chocolate或者scoop安装。安装方法在 :https://classic.yarnpkg.com/en/docs/install/

2,windows要在cmd里面运行: 

npm i -g @electron/build-tools

3, 源码下载并且编译构建

  • e init --root=~/electron --bootstrap testing
如果想做多个分支版本:
`--root=~/electron/branch` (e.g. `~/electron-gn/master`)
喝咖啡去吧。

一般可以分三步:
e init
一般都要起个名字,如branch7,chocolate,随意。以后切换版本用: e use branch7.
设定个root目录,多个构建debug,release会重复用它。
示例:master-testing,master-release都是起的名字配置
# making 'release' and 'testing' builds from master

$ e init master-testing -i testing --root=~/src/electron
Creating '~/src/electron'
New build config 'master-testing' created
Now using config 'master-testing'
$ e show current
master-testing

$ e init master-release -i release --root=~/src/electron
INFO Root '~/src/electron' already exists.
INFO (OK if you are sharing $root between multiple build configs)
New build config 'master-release' created
Now using config 'master-release'

$ e show configs
* master-release
  master-testing

$ e show current
master-release
$ e show root
~/src/electron

$ e use master-testing
Now using config 'master-testing'
$ e show current
master-testing
$ e show root
~/src/electron

e init --bootstrap 会全做,包括同步,构建。

  • e sync
注意sync前看看生成的配置文件,操作系统环境变量在这个json文件的env里面设置(存放目录C:UsersAdministrator.electron_build_toolsconfigs):
{
  "goma": "none",
  "root": "C:\dev\electron7",
  "origin": {
    "electron": "git@github.com:electron/electron.git",
    "node": "git@github.com:electron/node.git"
  },
  "gen": {
    "args": [
      "import("//electron/build/args/testing.gn")"
    ],
    "out": "Testing"
  },
  "env": {
    "CHROMIUM_BUILDTOOLS_PATH": "C:\dev\electron7\src\buildtools",
    "GIT_CACHE_PATH": "C:\Users\Administrator\.git_cache",
    "DEPOT_TOOLS_WIN_TOOLCHAIN": 0
  }
}


和depot_tools 使用目录有关的源码在 .electron_build_toolssrc下:
evm-config.js
utilsdepot-tools.js
等同gclient sync。同步源码,依赖。可以切换分支????不知道怎么做。 
下载想要的分支,用
git branch -vv 
可以看到本地分支关联的是哪个远程分支。

修改 .gclient 里面的url:
https//github/electron/electron@7-3-x

删除掉已经下载的src目录。重新同步代码:
e sync -vvvv
可以看到是指定的分支下载了。

因为用的unmanaged,所以切换分支是不行的,以前unmanaged就丢掉了。
是不是需要先upstream到远程分支。再操作。

gclient参数同样可以加入
$ e sync 
Running "gclient sync --with_branch_heads --with_tags" in '~/src/electron/src'
[sync output omitted]

 -v 或者 -vvvv输出更多信息。

e sync -vvvv --revision 7-3-x 

  • e build [target] -v
Target Description
breakpad Builds the breakpad dump_syms binary
chromedriver Builds the chromedriver binary
electron Builds the Electron binary (Default)
electron:dist Builds the Electron binary and generates a dist zip file
mksnapshot Builds the mksnapshot binary
node:headers Builds the node headers .tar.gz file


如果源码是从别人那里拷贝过来,需要设置:
rem set PATH=D:develectron7srcoutTesting;%PATH%
set DEPOT_TOOLS_DIR=D:develectron-masterelectrondepot_tools
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GIT_CACHE_PATH=D:\dev\.git_cache
set depot-tools=D:develectron-masterelectrondepot_tools
set PATH=%depot-tools%ootstrap-3_8_0_chromium_8_binpythoninscripts;%PATH%
electron7编译用到pip,安装了pywin32


帮助:
e --help
or e help <cmd>

e命令类似git,mvn:
nvm e Description
nvm ls e show configs 显示配置Show the available configurations
nvm current e show current 显示版本Show which configuration is currently in use
nvm use <name> e use <name> 切换分支Change which configuration is currently in use
 


运行于调试:

Using Electron

After you've built Electron, it's time to use it!

Command Description
e start Run the Electron build
e node Run the Electron build as Node
e debug Run the Electron build in a debugger
e test Run Electron's spec runner

As usual, any extra args are passed along to the executable. For example, e node --version will print out Electron's node version.

e debug

Runs your local Electron build inside of lldb or gdb.

$ uname
Linux
$ e debug
Reading symbols from /home/yourname/electron/gn/master/src/out/Testing/electron...
(gdb)
$ uname
Darwin

$ e debug
target create "/Users/yourname/electron-gn/src/out/Testing/Electron.app/Contents/MacOS/Electron"
(lldb)

e test

Starts the local Electron build's test runner. Any extra args are passed along to the runner.

# run all tests
e test

# run main process tests
e test --runners=main

Possible extra arguments to pass:

  • --node - Run Node.js' own tests with Electron in RUN_AS_NODE mode.
  • --runners=<main|remote|native> - The set of tests to run, can be either mainremote, or native.

Getting Information

e show shows information about the current build config.

Command Description
e show current The name of the active build config
e show configs Lists all build configs
e show env Show environment variables injected by the active build config
e show exe The path of the built Electron executable
e show root The path of the root directory from e init --root.
e show src [name] The path of the named (default: electron) source dir
e show stats Build statistics

Example usage:

$ uname
Darwin

$ e show exe
/Users/username/electron-gn-root/src/out/Testing/Electron.app/Contents/MacOS/Electron

$ uname
Linux

$ e show exe
/home/username/electron-gn-root/src/out/Testing/electron

$ e show out
Testing

$ e show src
/home/username/electron-gn-root/src/electron

$ cd `e show src base` && pwd
/home/username/electron-gn-root/src/base

$ ripgrep --t h TakeHeapSnapshot `e show src`

e open <commit | issue | PR>

Opens the GitHub page for the specified commit, pull request, or issue.

For example, e open 0920d01 will find the commit with an abbreviated sha1 of 0920d01, see that it's associated with pull request #23450, and open https://github.com/electron/electron/pull/23450 in your browser. Since you can pass in a pull request or issue number as well, e open 23450 would have the same effect.

e patches [patch-dir]

Exports patches to the desired patch folder in Electron source tree.

Valid patch directories can include:

  • node
  • v8
  • boringssl
  • chromium
  • perfetto
  • icu
Command Source Directory Patch Directory
e patches node src/third_party/electron_node src/electron/patches/node
e patches chromium src src/electron/patches/chromium
e patches boringssl src/third_party/boringssl/src src/electron/patches/boringssl
e patches v8 src/v8 src/electron/patches/v8
e patches perfetto src/third_party/perfetto src/electron/patches/perfetto
e patches icu src/third_party/icu src/electron/patches/icu

Advanced Usage

Per-Session Active Configs

If you want your shell sessions to each have different active configs, try this in your ~/.profile or ~/.zshrc or ~/.bashrc:

export EVM_CURRENT_FILE="$(mktemp --tmpdir evm-current.XXXXXXXX.txt)"

This will create per-shell temporary files in which he active config file can be changed with e use.

 

C:dev>e init --root=develectron mymaster
WARN A fixable error has occurred
--> git config --global core.filemode must be set to false.
Do you want build-tools to try fix this for you? [y/n]: y

Running "git config --global core.filemode false"
WARN A fixable error has occurred
--> git config --global core.autocrlf must be set to false.
Do you want build-tools to try fix this for you? [y/n]: y

Running "git config --global core.autocrlf false"
WARN A fixable error has occurred
--> git config --global branch.autosetuprebase must be set to always.
Do you want build-tools to try fix this for you? [y/n]: y

Running "git config --global branch.autosetuprebase always"
WARN A fixable error has occurred
--> A required dependency "choco" could not be located, it probably has to be installed.
Do you want build-tools to try fix this for you? [y/n]: y

Running "powershell -Command Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))"
WARN A fixable error has occurred
--> A required dependency "python" could not be located, it probably has to be installed.
Do you want build-tools to try fix this for you? [y/n]: y

Running "choco install python2 --yes"
WARN A fixable error has occurred
--> A required dependency "pywin32" could not be located, it probably has to be installed.
Do you want build-tools to try fix this for you? [y/n]: y

Running "choco install pywin32 --yes"
C:dev>e init --root=develectron mymaster
Creating develectron
Cloning "depot_tools" into C:UsersAdministrator.electron_build_tools	hird_partydepot_tools
Updating C:UsersAdministrator.electron_build_tools	hird_partydepot_tools
Running "cmd.exe /c C:UsersAdministrator.electron_build_tools	hird_partydepot_toolsupdate_depot_tools.bat"
Downloading CIPD client for windows-amd64 from https://chrome-infra-packages.appspot.com/client?platform=windows-amd64&version=git_revision:9f9afb5ef6ef9d4887e8aa2bb617dfdd798f8005...
Running "python C:UsersAdministrator.electron_build_tools	hird_partydepot_toolsgclient.py config --name src/electron --unmanaged https://github.com/electron/electron" in develectron
Creating C:UsersAdministrator.electron_build_toolsconfigs
New build config mymaster created in C:UsersAdministrator.electron_build_toolsconfigsevm.mymaster.json
Now using config mymaster