Hook

使用非同步回呼函式指定自訂建置邏輯

在 Electron Forge 中,hook 是非同步回呼函式,可讓您在開發或建置過程中的不同時間點插入自己的邏輯。

每個 hook 函式都將 Forge 設定物件作為第一個參數。

在 hook 函式中寫入 stdoutstderr 的任何內容,都會在 Forge 建置完成後列印在主控台中。

若要深入了解 Forge 建置過程中的不同階段,請參閱建置生命週期文件。

簡單 Hook

在 Electron Forge 中,大多數 hook 是簡單 hook,會在建置生命週期期間執行副作用,而不會直接影響建置中的後續步驟。

generateAssets

  • 參數

    • config:ResolvedForgeConfig - Forge 設定物件

    • platform: string - 作業系統平台

    • arch: string - CPU 架構

  • 傳回:Promise<void>

在 Forge 的 startpackage 命令之前,會呼叫 generateAssets()

您可以使用這個 hook 來產生應用程式在執行階段所需,但在原始程式碼中不存在的任何靜態檔案或資源。

例如,您可以使用這個 hook 來產生包含所有相依性的授權的授權檔案。

postStart

在 Forge 的 start 命令以開發模式啟動應用程式之後,會呼叫 postStart()

您可以使用這個 hook 將接聽程式附加到產生的子處理序。

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>

在 Forge 於 package 步驟中執行 Electron Packager 之前,會呼叫 prePackage()

packageAfterCopy

  • 參數

    • config:ResolvedForgeConfig - Forge 設定物件

    • buildPath: string- 應用程式的暫存資料夾路徑

    • electronVersion: string- 應用程式的 Electron 版本

    • platform: string - 作業系統平台

    • arch: string - CPU 架構

  • 傳回:Promise<void>

在 Electron Packager 的 afterCopy hook 內,會呼叫 packageAfterCopy()

在 Forge 的 package 步驟中,Electron Packager 會將應用程式的建置目錄複製到暫存資料夾。

此複製步驟完成後,會執行 afterCopy hook。

packageAfterPrune

  • 參數

    • config:ResolvedForgeConfig - Forge 配置物件

    • buildPath: string- 應用程式的暫存資料夾路徑

    • electronVersion: string- 應用程式的 Electron 版本

    • platform: string - 作業系統平台

    • arch: string - CPU 架構

  • 傳回:Promise<void>

packageAfterPrune() 在 Electron Packager 的 afterPrune 鉤子內被呼叫。

在 Forge 的 package 步驟中,Electron Packager 會從您的應用程式複製到的臨時資料夾中修剪非生產環境的 node_modules 相依性。此步驟會最小化您的應用程式生產環境套件的大小。

afterPrune 鉤子會在修剪步驟之後執行。

如果您的 packagerOptions.prune 選項設定為 falsepackageAfterPrune() 將不會有任何效果。

packageAfterExtract

  • 參數

    • config:ResolvedForgeConfig - Forge 配置物件

    • buildPath: string - Electron 二進位檔的臨時資料夾路徑

    • electronVersion: string- 應用程式的 Electron 版本

    • platform: string - 作業系統平台

    • arch: string - CPU 架構

  • 傳回:Promise<void>

packageAfterExtract() 在 Electron Packager 的 afterExtract 鉤子內被呼叫。

在 Forge 的 package 步驟中,Electron Packager 會將您的 Electron 二進位檔解壓縮到一個臨時資料夾中。

afterExtract 鉤子會在解壓縮步驟之後執行。

postPackage

  • 參數

    • config:ResolvedForgeConfig - Forge 配置物件

    • packageResult: 物件

      • platform: string - 作業系統平台

      • arch: string - CPU 架構

      • outputPaths: string[] - 套件輸出的檔案系統路徑

  • 傳回:Promise<void>

postPackage() 在 Forge 的 package 步驟成功完成後被呼叫。

例如

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 步驟成功完成後被呼叫。

它會傳遞一個從 make 步驟輸出的 MakeResult 物件陣列。如果您希望變異 Make 結果的陣列,您可以傳回一個新的 MakeResult 物件陣列,供 Electron Forge 在後續步驟中使用。

readPackageJson

  • 參數

    • config:ResolvedForgeConfig - Forge 配置物件

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

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

readPackageJson() 會在 Forge 每次嘗試讀取您的 package.json 檔案時被呼叫。

完整的 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 鉤子期間)。

上次更新時間