版本0.17开始 , 切换为新构建配置系统GN和Chromium的Ninja . NW中的Node.js仍然使用GYP/Ninja构建 . 该文档适用版本0.13及更新版本 . 遗留版本构造说明 , 可以参考GitHub的[wiki](https://github.com/nwjs/nw.js/wiki/Building-nw.js) . 参考官网下载页面构建配置以及构建步骤: http://buildbot-master.nwjs.io:8010/waterfall
NW.js在Chromium中使用同样的构造工具和步骤 . 根据构造使用的系统参考指导说明安装depot_tools
工具以及其他前提条件 .
Windows
Mac OS X
Linux
Windows系统中 , Chromium文档建议 , 运行set DEPOT_TOOLS_WIN_TOOLCHAIN=0
或者设置全局变量 .
Xcode 7 , 不支持Xcode 7中的SDK 10.11 . 如果升级到Xcode 7 , 可以降低版本到Xcode 6或者拷贝其他设备的Mac SDK 10.10 , `xcode-select -p`/Platforms/MacOSX.platform/Developer/SDKs
.
步骤 1. 创建目录存放NW.js源码 , 例如: $HOME/nwjs
, 在创建的目录中运行以下命令生成.gclient
文件:
mkdir -p $HOME/nwjs
cd $HOME/nwjs
gclient config --name=src https://github.com/nwjs/chromium.src.git@origin/nw17
通常不会使用Chromium进行测试 , Chromium测试需要同步测试用例以及参考构建 , 该过程需要花费大量时间 . 打开.gclient
文件 , 创建以及替换以下内容到custom_deps
:
"custom_deps" : {
"src/third_party/WebKit/LayoutTests": None,
"src/chrome_frame/tools/test/reference_build/chrome": None,
"src/chrome_frame/tools/test/reference_build/chrome_win": None,
"src/chrome/tools/test/reference_build/chrome": None,
"src/chrome/tools/test/reference_build/chrome_linux": None,
"src/chrome/tools/test/reference_build/chrome_mac": None,
"src/chrome/tools/test/reference_build/chrome_win": None,
手动复制以及检查以下资源分支:
由GitHub和Google的Git提供的资源需要下载 , 大小通常为20G以及更多 , 所以需要一个较好的网络以及耐心完成该过程 .
完成之后 , src
目录中能够找到.gclient
文件 .
Linux系统中首次构造
如果在Linux系统中完成首次构造 , 需要运行`gclient sync --with_branch_heads --nohooks` , Ubuntu系统中需要运行`./build/install-build-deps.sh` , 安装需要依赖包 . 参考[Chromium文档](http://dev.chromium.org/developers/how-tos/get-the-code) , 查看源代码中详细的结构信息 .
Chromium中使用GN生成ninja构建文件
cd src
gn gen out/nw (不支持修改'nw'路径 . 如果新建最好不要修改'out'路径)
官方构建参数:
is_debug=false
is_component_ffmpeg=true
target_cpu="x64"
通过设置is_component_build = true
进行支持组件构建 , 以便能够加快开发周期 .
参考GN和GYP参数映射关系相关文档https://chromium.googlesource.com/chromium/src/+/master/tools/gn/docs/cookbook.md#Variable-mappings
Node中使用GYP生成ninja构建文件
cd src
GYP_CHROMIUM_NO_ACTION=0 ./build/gyp_chromium third_party/node/node.gyp
或者使用以下命令完成组件构建:
./build/gyp_chromium -D component=shared_library third_party/node/node.gyp
改变Node构建配置 , 需要设置GYP_DEFINES环境变量
构建32/64位
Windows
- 32-bit: 默认构建
- 64-bit:
set GYP_DEFINES="target_arch=x64"
以及在out/Debug_x64
或out/Release_x64
目录中重新构建
- Linux
- 32-bit: TODO: chroot
- 64-bit: 默认构建
- 32-bit:
export GYP_DEFINES="host_arch=ia32 target_arch=ia32"
以及在out/Debug
或out/Release
目录中重新构建
- 64-bit: 默认构建
构建nwjs
运行GN之后 , ninja在out/nw
目录中生成构建文件 . 终端中运行以下命令 , 在out/nw
目录中生成标准NW.js二进制代码:
cd src
ninja -C out/nw nwjs
通常一个完成的构建过程需要的时间依赖于使用的系统以及设备 . 构建使用的设备推荐配置 , 多于8核的CPU , SSD以及大于8G的内存 . 参考[快速构建](#build-faster)相关配置 .
构建32/64位或者非标准构建方式 , 可以通过编辑out/nw/args.gn文件以及重新按照以上命令运行生成二进制代码 .
构建Node
cd src
ninja -C out/Release node
构建Node之后 , 最后需要拷贝Node构造的二进制文件到nwjs目录中:
cd src
ninja -C out/nw copy_node
- Standard: 'nwjs_sdk=false'
- SDK:
enable_nacl=true
参考构造方式 , 说明不同构造方式之间的区别 .
专有编解码器
由于权限问题 , NW.js预制构建的二进制代码不支持专有编解码器 , 例如H.264 . 所以不能在预制构建的NW.js中使用<audio>
和<video>
标签播放MP3/MP4 . 如果使用 , NW.js需要通过源代码重新进行编译 , 参考文档专有编解码器 .
Google网站中 , 提供一些快速构建的方法 . 打开一下链接查看针对各个系统中提供的方法:
- Mac系统构建说明:快速构建
- Linux系统中快速构建方法