跳转至内容

Electron 包指南

来自 ArchWiki
Arch 软件包指南

32位CLRCMake交叉编译DKMSEclipseElectron字体Free PascalGNOMEGoHaskellJavaKDE内核模块LispMesonMinGWNode.js非自由软件OCamlPerlPHPPythonRRubyRust - 安全ShellVCSWebWine

本文档涵盖了为 Electron 编写 PKGBUILD 的标准和指南。

使用系统 Electron

Arch Linux 提供了带版本的 electron* 软件包,以及一个指向最新版本的 electron 元软件包。它们可以通过 shell 脚本包装器来运行 Electron 应用程序。

#!/bin/sh

exec /usr/bin/electron34 /path/to/appname/ "$@"

在预构建的 Electron 应用程序中,appname/ 目录(或者名为 appname.asar 的文件包)位于 resources/app/ 文件夹(或 resources/app.asar)中。其余所有内容仅仅是 Electron 运行时的副本,可以在最终软件包中删除。

注意:需要 ELECTRON_RUN_AS_NODE=1 的应用程序(例如 Visual Studio Code)不能使用 /usr/bin/electron*。请参阅 code.sh

编辑 package.json 中的版本

使用 sed 编辑 package.jsonpackage-lock.json 中的 Electron 版本是危险的。你可以改为使用 npm pkg set devDependencies.electron=$(cat /usr/lib/electron*/version)

本文或本章节的准确性存在争议。

原因: 编辑 package.json 可能并非必要,且与正确构建模块无关。(在 Talk:Electron package guidelines 中讨论)

针对系统 Electron 构建编译扩展

某些 Electron 应用程序具有链接到 Electron 运行时的编译原生扩展,且必须使用正确的 Electron 版本构建。由于 npm/yarn 总是针对私有的预构建 Electron 副本进行构建,因此请修补 package.json 中的 Electron 依赖,使其引用与系统 Electron 依赖相同的版本。构建系统将下载所需的预构建副本,编译原生扩展并将所有内容打包到最终发行版中,但这在 package() 步骤中可以像往常一样被清理掉。

或者,你可以从 package.json 中删除 Electron 依赖,并在运行 npm 之前设置正确的环境变量。

export npm_config_target=$(tail /usr/lib/electron/version)
export npm_config_arch=x64
export npm_config_target_arch=x64
export npm_config_disturl=https://electron.js.cn/headers[dead link 2023-10-29—HTTP 404]
export npm_config_runtime=electron
export npm_config_build_from_source=true
HOME="$srcdir/.electron-gyp" npm install

HOME 设置为 $srcdir 内部的路径,这样构建过程就不会在你的实际 HOME 目录中放置任何文件。请确保为所有使用 .electron-gyp 缓存的后续命令调整路径。

(更多详情见 Electron 文档)。

将 electron-builder 与系统 Electron 配合使用

许多项目使用 electron-builder 来构建和打包 Javascript 文件和 Electron 二进制文件。默认情况下,electron-builder 会下载包管理文件(如 package.json)中定义的完整 Electron 版本。如果你想使用系统 Electron 并且由于最终会丢弃 Electron 二进制文件而想要节省带宽,这可能不是你想要的结果。electron-builder 提供了 electronDistelectronVersion 配置,分别用于指定自定义的 Electron 路径和应用程序打包所针对的版本。

找到 electron-builder 配置文件(例如 electron-builder.json)并添加以下设置:

  • 对于 electron34,将 electronDist 设置为 /usr/lib/electron34
  • electronVersion 设置为 /usr/lib/electron34/version 的内容(如果存在,去掉开头的 v

应用此操作的软件包:rocketchat-desktopAUR ubports-installer-gitAUR

electron-builder 配置

或者,你可以使用 CLI 来更改/添加这些设置,如下所示:

./node_modules/.bin/electron-builder --linux --x64 --dir $dist -c.electronDist=$electronDist -c.electronVersion=$electronVer

请注意,你必须指定所有这些选项,否则将无法生效。

本文或本章节的准确性存在争议。

原因: 当前设置仍然会从 $electronDist 复制 Electron。需要添加停止此操作的方法。(在 Talk:Electron package guidelines 中讨论)

本文或本章节的准确性存在争议。

原因: 使用 Arch 的 Electron 进行打包会丢弃由 electron-builder 翻转的 fuses 位 [1]。某些位应通过在启动器中包含环境变量来模拟。(在 Talk:Electron package guidelines 中讨论)

Architecture

请参阅 PKGBUILD#arch

包含编译原生扩展的 Electron 软件包是依赖架构的。否则,它很可能是架构无关的。

如果软件包包含预构建的 Electron 副本,则它始终是依赖架构的。

目录结构

如果软件包是依赖架构的,请将 resources/app/ 目录安装到 /usr/lib/appname/。否则,请使用 /usr/share/appname/

如果软件包包含预构建的 Electron 副本,请将整个最终发行版复制到 /opt/appname

获取 Electron 版本

Electron 的版本可以通过在包含 package.jsonpackage-lock.json 的目录中运行 npm pkg get devDependencies.electron 来获取。

预构建或 非自由 应用程序可能会在 package.jsonpackage-lock.jsonversion 文件中隐藏 Electron 版本。在这种情况下,你可以通过将 appapp.asar 替换为 /usr/lib/electron/resources/default_app.asar 并运行 pathto/electron-binary --version 来获取版本。

注意:避免在 PKGBUILD 中执行此操作。这应该是制作使用系统级 Electron 软件包的最后手段。

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.