为什么捐赠
API 浏览器
联系站长
Quasar CLI with Vite - @quasar/app-vite
Electron 配置项

我们会使用 Quasar CLI 来开发和构建 Electron 应用。使用 Quasar CLI 来构建不同类型(SPA、PWA、手机应用、Electron 应用)的项目对我们来说只是运行 “quasar dev” 和 “quasar build” 命令时传入的 “mode” 参数不同而已。

首先,我们先来学习如何针对 Electron 进行配置。

quasar.config 文件

/quasar.config file > sourceFiles

// 如果您希望更改默认的文件路径
// (注意不需要文件扩展名,它会自动解析 .js 和 .ts)
sourceFiles: {
  electronMain?: 'src-electron/electron-main',
}
/quasar.config file > electron

electron: {
  /**
   * 需要嵌入的内容脚本(js/ts)列表。
   * 列表中的每个条目应该是 /src-electron/ 目录下的文件名(不带扩展名)
   *
   * @default [ 'electron-preload' ]
   * @example [ 'my-other-preload-script' ]
   */
  preloadScripts?: string[];

  /**
   * 添加/删除/修改生产环境生成的 package.json 的属性
   */
  extendPackageJson?: (pkg: { [index in string]: any }) => void;

  /**
   * 扩展用于 electron-main 线程的 Esbuild 配置
   */
  extendElectronMainConf?: (config: EsbuildConfiguration) => void;

  /**
   * 扩展用于 electron-preload 线程的 Esbuild 配置
   */
  extendElectronPreloadConf?: (config: EsbuildConfiguration) => void;

  /**
   * 您需要选择使用 packager 或 builder 其中之一。
   * 它们都是优秀的开源项目,但满足的需求略有不同。
   * 使用 packager,您可以从一台机器上为所有主要平台
   * 构建未签名的项目。
   * 虽然这很好,但如果您只是想快速简单地打包,
   * builder 提供了更多平台粒度(和更好的集成)。
   * 使用 builder 从一台电脑进行交叉编译
   * 并不太可行,或者我们还没找到正确的方法。
   */
  bundler?: "packager" | "builder";
  packager?: ElectronPackager.Options;
  builder?: ElectronBuilder.Configuration;

  /**
   * 在使用 electron packager 或 electron builder 打包之前,
   * 在 UnPackaged 目录中安装依赖时指定额外参数;
   * 示例: [ 'install', '--production', '--ignore-optional', '--some-other-param' ]
   */
  unPackagedInstallParams?: string[];

  /**
   * 在开发模式下运行 Electron 应用时使用的调试端口
   * @default 5858
   */
  inspectPort?: number;
}

“packager” 属性对应 @electron/packager 选项。其中的 dirout 属性会被 Quasar CLI 重写以确保最佳效果。

“builder” 属性对应 electron-builder 选项

如果您想修改"渲染进程"(/src 目录下的 UI 代码)的 Vite 配置:

/quasar.config file

export default defineConfig((ctx) => {
  return {
    build: {
      extendViteConf(viteConf) {
        if (ctx.mode.electron) {
          // 修改 viteConf
          // 或返回一个对象来深度合并到当前的 viteConf 中
        }
      },
    },
  };
});

Packager vs. Builder

您需要选择使用 packager 或 builder 其中之一作为 Electron 应用的打包工具。它们都是优秀的开源项目,但满足的需求略有不同。使用 packager,您可以从一台机器上为所有主要平台构建未签名的项目(有一些限制)。如果您想要简单快速地将项目打包成各平台主流的安装包格式,那么请使用 builder,它提供了更多的平台粒度(和更好的集成)。但 builder 无法在一台电脑上进行交叉编译(或者我们还没找到正确的方法…)。

依赖优化

默认情况下,根目录 package.json 中的所有 dependencies 都会被安装并嵌入到生产可执行文件中。

这意味着它也会包含仅用于 UI 的依赖,而这些依赖已经被打包进了 UI 文件中(所以会造成重复)。从 CLI 的角度来看,我们没有通用的方法来判断一个依赖是仅用于 UI 还是被主进程/preload 脚本使用,所以无法自动移除它们。

不过,您可以通过 quasar.conf > electron > extendPackageJson(pkg) 来覆盖或修改 package.json 中的 dependencies。如果只保留主进程和 preload 线程的依赖,将会得到更小的生产可执行文件。