Windows 10 ARM

如果您的应用使用Electron 6.0.8及之后的版本,您现在可以在基于ARM的Windows10上构建它。 This considerably improves performance, but requires recompilation of any native modules used in your app. It may also require small fixups to your build and packaging scripts.

运行基本应用

如果您的应用没有使用任何本地模块,那么创建您的应用的Arm 版本就非常容易。

  1. 请确保您的应用的 node_modules 目录是空的。
  2. 使用 命令提示, 运行 设置 npm_config_arch=arm64 之前运行 npm 安装/yarn 安装 一切照旧。
  3. 如果您安装了 Electron 作为开发依赖项, npm 将下载和解包arm64 版本。 然后您可以将您的应用作为正常的软件包并进行分发。

A. 一般性考虑

建筑特定代码

Lots of Windows-specific code contains if… else logic that selects between either the x64 or x86 architectures.

  1. if (process.arch === 'x64') {
  2. // Do 64-bit thing...
  3. 如果你想要的话,你就会知道这个问题。
  4. // 做32位的事情...
  5. }

如果你想要瞄准arm64,那么这种逻辑通常会选择错误的架构, 如此仔细地检查您的应用程序并为这样的条件生成脚本。 在自定义构建和包装脚本中,您应该始终检查环境中 npm_config_arch 的值。 而不是依靠目前的程序轮廓。

原生模块

如果您使用本机模块,您必须确保他们编译与 MSVC 编译器的 v142 (在 Visual Studio 2017中提供)。 您还必须检查 native module 提供或引用的 .dll.lib 文件是否可用于 Arm 上的 Windows。

测试您的应用

要测试您的应用,请在运行Windows 10的Arm 设备上使用 Windows (版本1903或更晚)。 请确保您将应用程序复制到目标设备 - Chromium的沙盒在从网络位置加载您的应用程序资产时无法正常工作。

发展的前提条件

Node.js/node-gyp

推荐Node.js v12.9.0或更高版本。 如果更新到新的节点版本是不可取的。 您可以 手动更新npm的node-gyp 的副本 到第5版。 2 或更高版本,包含编译原生军备模块所需的更改。

Visual Studio 2017

需要的 Visual Studio 2017 (任何版本) 来交叉编译本机模块。 您可以通过 Microsoft 的 Visual Studio Dev Essentials程序 下载Visual Studio Community 2017 安装后,您可以通过从 命令提示 运行以下内容来添加特定的武器组件:

  1. vs_installer.exe ^
  2. --add Microsoft.VisualStudio.Workload.NativeDesktop ^
  3. --add Microsoft.VisualStudio.Component.VC.ATLMFC ^
  4. --add Microsoft.VisualStudio.Component.VC.Tools.ARM64
  5. --add Microsoft.VisualStudio.Component.VC.MFC.ARM64 ^
  6. --inclusdeRecommendation

创建交叉编译命令提示

在环境中设置 npm_config_arch=arm64 可以创建正确的arm64 bj 文件,但标准 VS 2017 的开发者命令提示 将使用x64链接。 要解决这个问题:

  1. 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.
  2. 右键单击新快捷键并选择 属性
  3. 目标 字段改为 vcvarsamd64_arm64.bat 结尾处改为 vcvarsamd64_x86.bat

如果成功完成,命令提示应在启动时打印类似于此的内容:

  1. **********************************************************************
  2. ** Visual Studio 2017 Developer Command Prompt v15.9.15
  3. ** Copyright (c) 2017 Microsoft Corporation
  4. **********************************************************************
  5. [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.) 要解决这个问题:

  1. Download the arm64 node.lib from https://electronjs.org/headers/v6.0.9/win-arm64/node.lib
  2. 移动到 %APPDATA%\..\Local\node-gyp\Cache\6.0.9\arm64\node.lib

为您正在使用的版本替换 6.0.9

交叉编译本地模块

完成上述所有后,打开您的交叉编译命令提示符并运行 设置 npm_config_arch=arm64。 然后使用 npm 安装 来构建您的项目正常。 如同交叉编纂的x86单元, 您可能需要删除 node_modules 来强制重新编译原生模块,如果它们以前是为另一个架构编译的。

调试本机模块

调试本地模块可以通过 Visual Studio 2017 (运行于您的开发机器)和相应的 Visual Studio 远程调试器 运行在目标设备上。 要调试:

  1. 在目标设备上通过命令提示符启动 .exe 应用(传递 --inspect-brk 参数可以在加载任何 native modules 之前暂停应用)。
  2. 在你的开发机器上启动 Visual Studio 2017
  3. 通过选择 调试 > 访问并输入设备的 IP 地址和 Visual Studio 远程调试器工具显示的端口号,连接到目标设备。
  4. 点击 刷新 并选择 相应的 Electron 进程以附加
  5. 您可能需要确保在您的应用中本地模块的任何符号都正确加载。 要配置此内容,请进入 Visual Studio 2017Debug > Options…,and add the folders containing your .pdb symbols under Debugging > Symbols.
  6. 一旦附加,设置任何相应的断点,并使用 Chrome 的 远程工具来恢复 JavaScript 执行节点

正在获取额外帮助

如果您遇到此文档的问题,或者您的应用在编译后使用 x86 而不是arm64, 请 在标题中使用”Windowson Arm”填写一个问题