钩子

使用异步回调函数指定自定义构建逻辑

在 Electron Forge 中,钩子是异步回调函数,允许您在开发或构建过程的不同点插入自己的逻辑。

每个钩子函数都将 Forge 配置对象作为第一个参数。

从钩子函数内部写入 stdoutstderr 将在 Forge 构建完成后打印到控制台。

要详细了解 Forge 构建过程中的不同阶段,请参阅 构建生命周期 文档。

简单钩子

在 Electron Forge 中,大多数钩子都是 简单钩子,它们在构建生命周期期间执行副作用,而不会直接影响构建中的后续步骤。

generateAssets

  • 参数

    • config:ResolvedForgeConfig - Forge 配置对象

    • platform: string - 操作系统平台

    • arch: string - CPU 架构

  • 返回值: Promise<void>

generateAssets() 在 Forge 的 startpackage 命令之前调用。

您可以使用此钩子生成应用程序在运行时需要但不在源代码中的任何静态文件或资源。

例如,您可以使用此钩子生成包含所有依赖项许可证的许可证文件。

postStart

postStart() 在 Forge 的 start 命令在开发模式下启动应用程序后调用。

您可以使用此钩子将侦听器附加到生成的子进程。

forge.config.js
module.exports = {
  hooks: {
    postStart: async (forgeConfig, appProcess) => {
      console.log(`Spawned child pid: ${appProcess.pid}`);
    }
  }
};

prePackage

  • 参数

    • config:ResolvedForgeConfig - Forge 配置对象

    • platform: string - 操作系统平台

    • arch: string - CPU 架构

  • 返回值: Promise<void>

prePackage() 在 Forge 在 package 步骤中运行 Electron Packager 之前调用。

packageAfterCopy

  • 参数

    • config:ResolvedForgeConfig - Forge 配置对象

    • buildPath: string- 应用程序的临时文件夹路径

    • electronVersion: string- 应用程序的 Electron 版本

    • platform: string - 操作系统平台

    • arch: string - CPU 架构

  • 返回值: Promise<void>

packageAfterCopy() 在 Electron Packager 的 afterCopy 钩子内调用。

在 Forge 的 package 步骤中,Electron Packager 会将应用程序的构建目录复制到一个临时文件夹。

此复制步骤完成后,将运行 afterCopy 钩子。

packageAfterPrune

  • 参数

    • config:ResolvedForgeConfig- Forge 配置对象

    • buildPath: string- 应用程序的临时文件夹路径

    • electronVersion: string- 应用程序的 Electron 版本

    • platform: string - 操作系统平台

    • arch: string - CPU 架构

  • 返回值: Promise<void>

在 Electron Packager 的 afterPrune 钩子中调用了 packageAfterPrune()

在 Forge 的 package 步骤中,Electron Packager 会从应用程序复制到的临时文件夹中修剪非生产环境的 node_modules 依赖项。此步骤可最大程度地减小应用程序生产包的大小。

afterPrune 钩子在此修剪步骤之后运行。

如果您的 packagerOptions.prune 选项设置为 false,则 packageAfterPrune() 将不起作用。

packageAfterExtract

  • 参数

    • config:ResolvedForgeConfig- Forge 配置对象

    • buildPath: string - Electron 二进制文件的临时文件夹路径

    • electronVersion: string- 应用程序的 Electron 版本

    • platform: string - 操作系统平台

    • arch: string - CPU 架构

  • 返回值: Promise<void>

在 Electron Packager 的 afterExtract 钩子中调用了 packageAfterExtract()

在 Forge 的 package 步骤中,Electron Packager 会将您的 Electron 二进制文件解压缩到一个临时文件夹中。

afterExtract 钩子在此解压缩步骤之后运行。

postPackage

  • 参数

    • config:ResolvedForgeConfig- Forge 配置对象

    • packageResult: Object

      • platform: string - 操作系统平台

      • arch: string - CPU 架构

      • outputPaths: string[] - 包输出的文件系统路径

  • 返回值: Promise<void>

在 Forge 的 package 步骤成功完成之后,会调用 postPackage()

例如

forge.config.js
module.exports = {
  hooks: {
    postPackage: async (forgeConfig, options) => {
      console.info('Packages built at:', options.outputPaths);
    }
  }
};

preMake

preMake()make 步骤运行之前被调用。

可变钩子

在 Electron Forge 中,可变钩子是一种特殊的钩子,它返回与其第二个参数相同类型的返回值。

返回的值将替换 Forge 生命周期中后续步骤中原始参数的值。

postMake

postMake() 在 Forge 的 make 步骤成功完成之后被调用。

它会传递一个 MakeResult 对象数组,这些对象是 make 步骤输出的。如果您希望修改 Make 结果数组,您可以返回一个新的 MakeResult 对象数组,Electron Forge 可以将其用于未来的步骤。

readPackageJson

  • 参数

    • config:ResolvedForgeConfig- Forge 配置对象

    • packageJson: Record<string, unknown> - 完整的 package.json 对象

  • 返回: Promise<Record<string, unknown> | void>

每次 Forge 尝试读取您的 package.json 文件时,都会调用 readPackageJson()

完整的 package.json 对象作为参数传入。如果您想以任何方式修改该对象,则必须这样做并返回新值以供 Forge 使用。

这对于在运行时设置 package.json 的 version 字段很有用。

forge.config.js
module.exports = {
  hooks: {
    readPackageJson: async (forgeConfig, packageJson) => {
      packageJson.version = '4.0.0';
      return packageJson;
    }
  }
};

注意: 此钩子不会更改 Electron Packager 用于自定义应用程序元数据的名称或版本,因为该名称或版本是在调用此钩子之前读取的(在 Electron Packager 的 afterCopy 钩子期间)。

上次更新于