Windows on ARM
如果您的应用使用Electron 6.0.8及之后的版本,您现在可以在基于ARM的Windows10上构建它。 这大大提高了性能,但需要重新编译应用中使用的任何原生模块。 它还可能需要对生成和打包脚本进行小的修改。
运行基本应用
如果您的应用不使用任何原生模块,那么创建应用的 Arm 版本非常简单。
- 确保应用的
node_modules
目录为空。 - 使用 命令提示符,运行
set npm_config_arch=arm64
,然后像往常一样运行npm install
/yarn install
。 - 如果您已将 Electron 安装为开发依赖项,npm 将下载并解压缩 arm64 版本。 然后,您可以像往常一样打包和分发你的应用。
一般考虑因素
特定于体系结构的代码
许多特定于 Windows 的代码包含在 x64 或 x86 体系结构之间进行选择的 if… else 逻辑。
if (process.arch === 'x64') {
// 在64位体系结构上执行的代码...
} else {
// 在32位体系结构上执行的代码...
}
如果您希望以 arm64 为目标,像这样的逻辑通常会选择错误的体系结构,所以仔细检查您的应用程序并为这样的情况编写脚本。 在自定义生成和打包脚本中,应始终检查环境中 npm_config_arch
的值,而不是依赖于当前的 process.arch。
Native modules(原生模块)
如果您使用原生模块,则必须确保它们使用 v142 的 MSVC 编译器(在 Visual Studio 2017 中提供)进行编译。 您还必须检查 native module 提供或引用的 .dll
或 .lib
文件是否可用于 Arm 上的 Windows。
测试应用程序
若要测试您的应用,请使用运行 Windows 10(1903 或更高版本)的 Arm 架构的 Windows 设备。 确保您将应用程序复制到了目标设备——从网络位置加载应用程序资源时,Chromium 的沙盒将无法正常工作。
开发先决条件
Node.js/node-gyp
建议使用 Node.js v12.9.0 或更高版本。 如果您不希望更新到新版本的 Node,则可以 手动更新 npm 的 node-gyp 副本 到 5.0.2 或更高版本,其中包含编译 Arm 原生模块所必需的更改。
Visual Studio 2017
需要 Visual Studio 2017 (任何版本) 来交叉编译原生模块。 您可以通过 Microsoft 的 Visual Studio Dev Essentials程序 下载Visual Studio Community 2017 安装后,您可以通过从 命令提示符 运行以下内容来添加特定的 Arm 组件:
vs_installer.exe ^
--add Microsoft.VisualStudio.Workload.NativeDesktop ^
--add Microsoft.VisualStudio.Component.VC.ATLMFC ^
--add Microsoft.VisualStudio.Component.VC.Tools.ARM64
--add Microsoft.VisualStudio.Component.VC.MFC.ARM64 ^
--inclusdeRecommendation。
创建交叉编译命令提示符
在环境中设置 npm_config_arch=arm64
以创建正确的 arm64 .obj
文件, 但是VS 2017 的Developer Command Prompt 将使用x64链接器。 要解决这个问题:
- 请将位于开始菜单中的 x64_x86 Cross Tools Command Prompt for VS 2017 快捷方式复制一份到方便的位置(例如,通过定位到快捷方式,右键单击,选择 打开文件位置,然后复制并粘贴)。
- 右键单击新快捷方式并选择 属性。
- 将 Target 字段改为在结尾处读取
vcvarsamd64_arm64.bat
,而不是vcvarsamd64_x86.bat
。
如果成功完成,命令提示应在启动时打印类似于此的内容:
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.15
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64_arm64'
如果您想要在 Windows on Arm 设备上直接开发您的应用程序, 在 Target 中替换 vcvarsx86_arm64.bat
,以便能够在设备的 x86 仿真时进行交叉编译。
与正确的 node.lib
连接
默认情况下, node-gyp
解包了Electron的Node Headers,并将x86和x64版本的 node.lib
下载到 %APPDATA%\..\Local\node-gyp\Cache
, 但它没有下载arm64版本(此修复正在开发中.) 要解决这个问题:
- 从 https://electronjs.org/headers/v6.0.9/win-arm64/node.lib 下载arm64
node.lib
- 移动到
%APPDATA%\..\Local\node-gyp\Cache\6.0.9\arm64\node.lib
将 6.0.9
替换为您正在使用的版本。
交叉编译本地模块
完成上述所有后,打开您的交叉编译命令提示符并运行 set npm_config_arch=arm64
。 然后使用 npm install
以正常方式构建您的项目。 像交叉编译x86模块一样,如果本地模块以前是为另一个架构编译的,你可能需要删除 node_modules
来强制重新编译。
调试本地模块
调试原生模块可以使用 Visual Studio 2017(运行在开发计算机上)和运行在目标设备上的对应的 Visual Studio 远程调试器 来完成。 调试步骤:
- 在目标设备上通过命令提示符启动
.exe
应用(传递--inspect-brk
参数可以在加载任何 native modules 之前暂停应用)。 - 在开发计算机上启动 Visual Studio 2017。
- 通过选择 调试 > 访问并输入设备的 IP 地址和 Visual Studio 远程调试器工具显示的端口号,连接到目标设备。
- 单击 刷新,然后选择 相应的 Electron 进程以附加。
- 您可能需要确保应用中原生模块的所有符号都已经正确加载。 要配置此内容,请进入 Visual Studio 2017Debug > Options…,and add the folders containing your
.pdb
symbols under Debugging > Symbols. - 附加后,设置适当的断点并使用 Chrome 的 用于Node的远程工具 恢复JavaScript的执行。
获取其他帮助
如果您在本文档中遇到问题,或者您的应用在 x86 版本中工作正常,但在 arm64 版本中工作不正常,请 提交问题 并在标题中注明“Windows on Arm”。