Windows on ARM¶
如果您的应用运行在 Electron 6.0.8 或更高版本上,您现在可以为其构建 Windows 10 on Arm 版本。这会显著提高性能,但需要重新编译应用中使用的任何原生模块。它可能还需要对您的构建和打包脚本进行一些小的修正。
运行基本应用¶
如果您的应用不使用任何原生模块,那么创建应用的 Arm 版本非常容易。
- 确保您应用的
node_modules目录是空的。 - 使用_命令提示符_,在照常运行
npm install/yarn install之前,先运行set npm_config_arch=arm64。 - 如果您将 Electron 作为开发依赖安装,npm 将下载并解压 arm64 版本。然后您可以像平常一样打包和分发您的应用。
一般注意事项¶
特定于架构的代码¶
许多 Windows 特定代码包含 if... else 逻辑,用于选择 x64 或 x86 架构。
如果您想要针对 arm64,这样的逻辑通常会选择错误的架构,因此请仔细检查您的应用和构建脚本中是否有此类条件。在自定义构建和打包脚本中,您应始终检查环境中的 npm_config_arch 值,而不是依赖当前的进程架构。
原生模块¶
如果您使用原生模块,必须确保它们针对 MSVC 编译器的 v142(在 Visual Studio 2017 中提供)进行编译。您还必须检查原生模块提供或引用的任何预构建 .dll 或 .lib 文件是否可用于 Windows on Arm。
测试您的应用¶
要测试您的应用,请使用运行 Windows 10(版本 1903 或更高版本)的 Windows on Arm 设备。确保将您的应用程序复制到目标设备上 - 从网络位置加载应用资源时,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 ^
--includeRecommended
创建交叉编译命令提示符¶
在环境中设置 npm_config_arch=arm64 会生成正确的 arm64 .obj 文件,但标准的 VS 2017 开发者命令提示符 将使用 x64 链接器。要解决此问题:
- 复制 x64_x86 交叉工具命令提示符(VS 2017) 的快捷方式(例如,在开始菜单中找到它,右键单击,选择 打开文件位置,然后复制并粘贴)到方便的位置。
- 右键单击新快捷方式,然后选择 属性。
- 将 目标 字段结尾改为
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 设备上开发应用程序,请在 目标 中替换为 vcvarsx86_arm64.bat,以便通过设备的 x86 仿真进行交叉编译。
链接到正确的 node.lib¶
默认情况下,node-gyp 会解压 Electron 的 node 头文件,并将 node.lib 的 x86 和 x64 版本下载到 %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以在任何原生模块加载之前暂停它)。 - 在您的开发机上启动 Visual Studio 2017。
- 通过选择 调试 > 附加到进程... 连接到目标设备,然后输入设备的 IP 地址和 Visual Studio 远程调试器工具显示的端口号。
- 单击 刷新,然后选择要附加的相应 Electron 进程。
- 您可能需要确保应用中原生模块的任何符号都被正确加载。要进行配置,请在 Visual Studio 2017 中前往 调试 > 选项...,然后在 调试 > 符号 下添加包含
.pdb符号的文件夹。 - 附加后,设置任何合适的断点,并使用 Chrome 的 Node 远程工具 恢复 JavaScript 执行。
获取额外帮助¶
如果您在使用本文档时遇到问题,或者您的应用在编译为 x86 时可用但编译为 arm64 时不可用,请在标题中包含 "Windows on Arm" 并提交问题。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron