01 环境
按照官网说明
http://electronjs.org/docs/development/build-instructions-windows
需要安装
Visual Studio 2017
Python 2.7
Node.js
Git
如果编译libchromiumcontent,要下载chromium源码。需要vpn。参考
https://blog.csdn.net/longji/article/details/54632083
配置环境变量
:: electron3.0.0以后,可以使用vs2017。
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_MSVS_VERSION=2017
set GYP_MSVS_OVERRIDE_PATH=D:\install\Microsoft Visual Studio\2017\Community
LIBCHROMIUMCONTENT_GIT_CACHE=D:\git\libchromiumcontent_git_cache
set vs2017_install=D:\install\Microsoft Visual Studio\2017\Community
##02 编译electron
###02.01 代码下载
:: 代码下载比较快
git clone https://github.com/electron/electron.git
cd electron
:: 迁出最新的相对稳定版本, tag:v3.0.0,目前稳定版本是3.0.0(git tag)
git checkout -b b3.0.0 v3.0.0
Bootstrap 脚本也是必须下载的构建依赖,来创建项目文件. 需要注意的是我们使用ninja创建 Electron,这样的话就不需要生成 Visual Studio 项目了。
:: 如果本地有多个python环境,把python2.7的环境变量设置到最前面
::
set PATH=C:\python\Python27;C:\python\Python27\Scripts;%PATH%
cd electron
# 因为这个bootstrap.py是带.py后缀的,所以前面不带python也可以。
# script\bootstrap.py -v 的运行时间稍微长一下,要下载vendor依赖。这个命令会生成 ./out目录
python script\bootstrap.py -v --target_arch=x64
# 为了生产vs工程,带--msvs 不会生成.\out目录,只会生成msvs的项目文件和.sln文件
# python script\bootstrap.py -v --msvs
这个过程会下载electron的node_modules 和libchromiumcontent.tar.bz2,libchromiumcontent-static.tar.bz2 压缩包(较大:2.3GB,包含libchromiumcontent的编译静态库和动态库)。
libchromiumcontent.tar.bz2解压到 electron\vendor\download\libchromiumcontent\shared_library。
libchromiumcontent-static.tar.bz2解压到 electron\vendor\download\libchromiumcontent\static_library。
带 --msvs,会多下载 directxsdk-x64,解压到 electron\external_binaries。
02.02 编译celectron
:: 构建 Release 和 Debug 目标:先编译Release目标,再编译Debug目标。
:: 默认是先编译 out\R,在编译 out\D;
:: 最后link electron.exe 的时间比较长: [1232/1232] LINK_EMBED electron.exe
python script\build.py
如果指定输出路径,最好修改一下script\build.py
。把config[0]修改为config。
这样用python script\build.py -c subdir
的形式指定subdir.最终的结果会输出到out\subdir下。
build_path = os.path.join('out', config[0])
:: 修改为
build_path = os.path.join('out', config)
:: 如下命令,会使用ninja编译目标Debug_x64
python script\build.py -c Debug_x64
:: 可以指定编译版本--target_arch=ia32 或 --target_arch=x64
:: 如果不是实验性质,建议一定带上--target_arch=ia32或x64,并且代码下载到不同目录。
:: 避免切换不同版本时,下载静态库或者动态库,或者指定 --dev
script\bootstrap.py -v --target_arch=ia32
清理
执行清理动作一定要确认确实要清理,重新编译一遍蛮耗时的。
:: 清理构建文件:(慎用!!!,慎用!!!)
npm run clean
:: 清理 out 和 dist 目录:
npm run clean-build
03 编译 libchromiumcontent
参考 : http://www.cnblogs.com/diligenceday/p/9279234.html
使用已经下载的chromium代码。避免重复下载
libchromiumcontent编译需要下载chromium源码。如果已经下载完整版本的chromium,可以把完正的
chromium\src
拷贝到electron\vendor\libchromiumcontent
目录下。
官网说明文档:https://electronjs.org/docs/development/upgrading-chromium
03.01 获取代码
# **因为前面下载electron代码,已经下载了libchromiumcontent。所以不用执行代码获取。
# **如果要向独立换个目录,那就重新获取一下。
# 官网说明里,使用git协议获取,需要公钥
# git clone git@github.com:electron/libchromiumcontent.git
# 这里修改为https协议获取
git clone https://github.com/electron/libchromiumcontent.git
cd libchromiumcontent
git checkout -b belectron-3.0.0 electron-3.0.0
python script\bootstrap -v --msvs
03.02 指定更新的chromium源码版本
访问 https://omahaproxy.appspot.com/,查看自己想要的chromium版本。目前稳定版本68.0.3440.106。这里使用68.0.3440.106。
手动修改electron\vendor\libchromiumcontent\VERSION
里的版本号为68.0.3440.106,保存即可。
03.03 下载chromium代码
采用10MB的vpn大约需要3.5小时。vpn搭建参考https://blog.csdn.net/longji/article/details/54632083。vpn扩充带宽,从2MB扩充到10MB,目前腾讯cvm 1天大17.5元。
运行更新语句:
python script\update
如果已经有下载好的chromium代码,直接拷贝到
electron\vendor\libchromiumcontent
目录即可。只拷贝src目录全部到libchromiumcontent目录内即可。
04 注意事项
对于ia32和x64的版本,建议分成完全不同的两个目录存放,而不是做分支切换,他们的依赖完全不同,每次切换后更新这些东西很耗时。
npm run clean-build
script\bootstrap.py -v --target_arch=ia32
script\bootstrap.py -d --build_release_libcc
script\build.py -c R
script\create-dist.py --chromium_dir="D:\\git\\electron_ia32\\vendor\\libchromiumcontent\\dist\\main\\static_library"
npm run clean-build
script\bootstrap.py -v --target_arch=x64
script\bootstrap.py -d --build_release_libcc
script\build.py -c R
script\create-dist.py --chromium_dir="D:\\git\\electron_x64\\vendor\\libchromiumcontent\\dist\\main\\static_library"
参考语句:
# 本地编译nodejs扩展时使用
set PATH=C:\python\Python27;C:\python\Python27\Scripts;%PATH%
node-gyp rebuild --target=3.0.0 --arch=x64 --dist-url=https://atom.io/download/electron --msvs_version=2017
node-gyp rebuild --target=3.0.0 --arch=ia32 --dist-url=https://atom.io/download/electron --msvs_version=2017
node-gyp install --target=3.0.0 --arch=x64 --dist-url=https://atom.io/download/electron --msvs_version=2017
node-gyp install --target=3.0.0 --arch=ia32 --dist-url=https://atom.io/download/electron --msvs_version=2017
# 安装到全局不行
npm install -g ev-emitter jquery draggabilly --save
# 只要安装到本地才可以
npm install ev-emitter jquery draggabilly --save