Electron Forge で必要なファイルだけ zip に含める設定

Electron Forge で MakerZIP を使ってパッケージングしたとき、必要なファイルだけを含める設定について。

Electron Forgevite-typescript テンプレートでアプリケーションを作って MakerZIP を使ってパッケージングしたとき、何も設定をいじらないと resources/app の中に node_modules や元のソースコードなど一式全部が含まれてしまう。

調べたところ、画像等を使っていない場合に最低限 zip に含めるべきソースコードは

  • .vite ディレクトリ
  • package.json
  • index.html

だけなので、forge.config.ts に packageConfig.ignore を指定して不要なファイルを含めないようにしないと zip の展開に時間がかかりすぎる。

import { MakerZIP } from "@electron-forge/maker-zip";
import { VitePlugin } from "@electron-forge/plugin-vite";
import type { ForgeConfig } from "@electron-forge/shared-types";

const config: ForgeConfig = {
  packagerConfig: {
    ignore: [
      /(\.eslint.*|\.gitignore|\.prettier.*|vite\..*\.ts)/,
      ".vscode",
      "node_modules",
      "src",
      "forge.config.ts",
      "package-lock.json",
      "tsconfig.json",
    ],
  },
  rebuildConfig: {},
  makers: [new MakerZIP({}, ["win32", "darwin", "linux"])],
  plugins: [
    new VitePlugin({
      // `build` can specify multiple entry builds, which can be Main process, Preload scripts, Worker process, etc.
      // If you are familiar with Vite configuration, it will look really familiar.
      build: [
        {
          // `entry` is just an alias for `build.lib.entry` in the corresponding file of `config`.
          entry: "src/main.ts",
          config: "vite.main.config.ts",
        },
        {
          entry: "src/preload.ts",
          config: "vite.preload.config.ts",
        },
      ],
      renderer: [
        {
          name: "main_window",
          config: "vite.renderer.config.ts",
        },
      ],
    }),
  ],
};

export default config;

packageConfig.ignore は正規表現を受け付けるのでもっとうまく書けそうなのだが、私の正規表現スキルが不足していて愚直に不要なファイルをリストアップすることになった。

以上