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 ^
--includeRecommended
创建交叉编译命令提示符
Setting npm_config_arch=arm64
in the environment creates the correct arm64 .obj
files, but the standard Developer Command Prompt for VS 2017 will use the x64 linker. To fix this:
- Duplicate the x64_x86 Cross Tools Command Prompt for VS 2017 shortcut (e.g. by locating it in the start menu, right clicking, selecting Open File Location, copying and pasting) to somewhere convenient.
- Right click the new shortcut and choose Properties.
- Change the Target field to read
vcvarsamd64_arm64.bat
at the end instead ofvcvarsamd64_x86.bat
.
If done successfully, the command prompt should print something similar to this on startup:
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.15
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64_arm64'
If you want to develop your application directly on a Windows on Arm device, substitute vcvarsx86_arm64.bat
in Target so that cross-compilation can happen with the device’s x86 emulation.
与正确的 node.lib
连接
By default, node-gyp
unpacks Electron’s node headers and downloads the x86 and x64 versions of node.lib
into %APPDATA%\..\Local\node-gyp\Cache
, but it does not download the arm64 version (a fix for this is in development.) To fix this:
- Download the arm64
node.lib
from https://electronjs.org/headers/v6.0.9/win-arm64/node.lib - Move it to
%APPDATA%\..\Local\node-gyp\Cache\6.0.9\arm64\node.lib
Substitute 6.0.9
for the version you’re using.
交叉编译本地模块
After completing all of the above, open your cross-compilation command prompt and run set npm_config_arch=arm64
. Then use npm install
to build your project as normal. As with cross-compiling x86 modules, you may need to remove node_modules
to force recompilation of native modules if they were previously compiled for another architecture.
调试本地模块
调试原生模块可以使用 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”。