HomeBlogAboutLogin
返回列表

Electron

打包配置

1. 安装依赖

npm install electron-builder --save-dev

或者

yarn add electron-builder --dev

确保 electron-builder 只在 devDependencies

2. 修改 package.json

package.json 中添加 build 字段:

 "build": {
    "productName": "GCPPrint",
    "appId": "com.example.app",
    "copyright": "",
    "directories": {
      "output": "dist"
    },
    "asar": true,
    "files": [
      "**/*"
    ],
    "extraResources": [
      "plugin/*"
    ],
    "electronDownload": {
      "mirror": "https://npmmirror.com/mirrors/electron/"
    },
    "nsis": {
      "oneClick": false,
      "allowElevation": true,
      "allowToChangeInstallationDirectory": true,
      "installerIcon": "./build/icons/icon.ico",
      "uninstallerIcon": "./build/icons/icon.ico",
      "installerHeaderIcon": "./build/icons/icon.ico",
      "createDesktopShortcut": true,
      "createStartMenuShortcut": true,
      "shortcutName": "Hiprint",
      "include": "installer.nsh"
    },
    "mac": {
      "icon": "./build/icons/icon.icns",
      "artifactName": "${productName}-${version}.${ext}",
      "target": [
        "dmg"
      ],
      "identity": null
    },
    "dmg": {
      "sign": false
    },
    "win": {
      "icon": "./build/icons/256x256.png",
      "artifactName": "${productName}-${version}.${ext}",
      "requestedExecutionLevel": "requireAdministrator",
      "target": [
        {
          "target": "nsis"
        }
      ]
    },
    "linux": {
      "icon": "./build/icons/256x256.png",
      "artifactName": "${productName}-${version}.${ext}",
      "target": [
        "tar.xz"
      ]
    },
    "protocols": [
      {
        "name": "hiprint",
        "schemes": [
          "hiprint"
        ]
      }
    ]
  }
  • productName:应用名称,最终的可执行文件和安装包都会使用这个名字。

  • appId:应用的唯一标识,通常使用 反向域名 方式(如 com.example.app)。

  • copyright:版权信息,通常包括开发者的名称和邮箱。

  • output:指定打包后的文件存放位置,默认是 dist,这里改为了 out 目录。

  • asar: true:启用 ASAR(一个压缩格式),减少应用体积,提高加载速度(类似 .zip)。

  • files:指定要打包的文件,这里 **/* 代表 所有文件 都会打包。

  • extraResources:额外的资源文件,这里 plugin/* 目录的内容会被包含在最终的应用包中。

  • electronDownload: 指定 Electron 下载的 镜像源,这里使用 npm 镜像,加速下载,适用于国内环境。

  • NSIS(Nullsoft Scriptable Install System) 是 Windows 安装程序的标准。

    oneClick: false:关闭 一键安装,用户可以选择安装路径。

    perMachine: true: 如果设置为 true,则应用会安装在所有用户的计算机上,而不是当前用户的目录。默认情况下,electron-builder 会安装应用到当前用户的 AppData 文件夹。如果你设置为 true,安装程序会将应用安装到 Program Files 目录,并且需要管理员权限(如果用户没有管理员权限,系统会提示 UAC)。

    allowElevation: true:需要管理员权限安装(requireAdministrator)。

    allowToChangeInstallationDirectory: true:允许用户更改安装目录。

    installerIcon/uninstallerIcon/installerHeaderIcon:设置安装包和卸载程序的图标。

    createDesktopShortcut: true:创建桌面快捷方式。

    createStartMenuShortcut: true:创建开始菜单快捷方式。

    shortcutName: "Hiprint":快捷方式的名称。

    include: "installer.nsh":包含自定义 NSIS 脚本,可以额外配置安装逻辑。

  • **macOS 打包 **mac

    icon`:macOS 应用的 .icns 图标

    artifactName:打包后的文件命名格式,例如 hiprint-1.0.0.dmg

    target:打包格式,dmg 是 macOS 的磁盘镜像格式。

    identity: null:不进行代码签名(如果要上架 App Store 需要签名)。

    dmg.sign: false:不对 .dmg 进行签名,适用于开发测试环境。

  • Windows 打包 win

    icon:Windows 应用的图标(256x256.png)。

    artifactName:打包后的文件命名格式,例如 hiprint-1.0.0.exe

    requestedExecutionLevel: "requireAdministrator":安装时要求管理员权限。 asInvoker-普通权限 requireAdministrator-管理员权限 highestAvailable-用户最高可用权限

    target: nsis:使用 NSIS 作为 Windows 安装包格式。

  • 自定义协议protocols

    "protocols": [
      {
        "name": "hiprint",
        "schemes": [
          "hiprint"
        ]
      }
    ]

    这部分用于注册 自定义 URL 协议,类似 mailto:, tel:,允许应用用 hiprint:// 这样的链接启动。不是必须的,但如果你的应用 需要通过自定义 URL 触发启动或传递参数,那就需要它。

    protocols 的作用:

    允许你的 Electron 应用注册一个自定义 URL 方案,这样你的应用可以通过类似 hiprint://some-action 这样的 URL 被外部程序(如浏览器、其他应用)调用

    📌 典型应用场景

    1. 点击网页上的链接,打开 Electron 应用
      • 例如:在网页上点击 hiprint://open?file=test.pdf,Electron 应用会启动并接收参数 "file=test.pdf"
    2. 深度链接(Deep Linking)
      • 适用于桌面应用与 Web 端或移动端的交互,例如:
        • 你在 浏览器微信 中点击 hiprint://open?id=123,Electron 应用会打开并处理 id=123
    3. 与其他软件通信
      • 其他软件可以调用 hiprint://do-something 来控制 Electron 应用,比如启动某个特定功能。
    4. 用户身份验证(OAuth 登录回调)
      • 比如你的 Electron 应用需要使用 Google 登录,OAuth 服务器可以重定向回 hiprint://auth-success?token=abc123

    protocols 配置解析

    "protocols": [
      {
        "name": "hiprint",
        "schemes": ["hiprint"]
      }
    ]

    🔹 name: 自定义协议的名称(不重要,主要用于识别)。 🔹 schemes: 这里注册了 hiprint:// 作为协议。

    注册成功后,系统会将 hiprint:// 识别为一个合法的 URL 方案。

    如何在 Electron 处理这个协议

    main.js 里监听 open-url 事件:

    const { app } = require('electron');
    
    app.on('open-url', (event, url) => {
      event.preventDefault();
      console.log('收到自定义协议请求:', url);
      // 解析 URL 处理相关操作
    });

    📌 Windows 可能无法触发 open-url,需要 app.on('second-instance', ...) 处理。

开机启动不生效?

开机启动设置

if (!app.isPackaged) {
  // 窗口左上角图标
  mainWindow.icon = path.join(__dirname, 'build/icons/icon_256x256.png');
} else {
  //开机启动
  app.setLoginItemSettings({
    openAtLogin: true,
    openAsHidden: true,
  });
}
//package.json
 "win": {
  "requestedExecutionLevel": "asInvoker",  //这里不能是管理员权限
}

在 Electron 打包的应用中,如果你设置了应用需要 管理员权限 来运行(例如,requestedExecutionLevel 设置为 requireAdministrator),那么可能会遇到 开机启动时无法自动启动 的问题。这是因为 UAC(用户账户控制) 在 Windows 上会阻止没有用户交互的程序请求管理员权限,尤其是当应用尝试在开机时自动启动时。在开机时,应用没有机会等待用户交互,这意味着它会被阻止运行。

dialog弹窗

const { dialog } = require('electron');

dialog
  .showMessageBox(mainWindow, {
    type: 'none',
    buttons: ['取消', '确定'], // 按钮
    defaultId: 1, // 默认选中确定按钮
    title: '你真的要切换吗?',
    message: '',
  })
  .then((result) => {
    if (result.response === 1) {
      console.log('User clicked OK');
    } else {
      console.log('User clicked Cancel');
    }
  });

更是示例官方文档:https://www.electronjs.org/zh/docs/latest/tutorial/notifications

【Electron】常用小功能实现合集

https://juejin.cn/post/7144341098096721956

缓存electron-store

1. 安装 electron-store

首先,你需要在项目中安装 electron-store

npm install electron-store

2. 基本用法

const Store = require('electron-store');
const store = new Store();

// 设置数据
store.set('name', 'Electron');

// 获取数据
const name = store.get('name');
console.log(name); // 输出: Electron

// 删除数据
store.delete('name');

// 检查是否存在某个键
const hasName = store.has('name');
console.log(hasName); // 输出: false

// 获取所有数据
const allData = store.store;
console.log(allData);

// 清空所有数据
store.clear();

3. 配置初始化

const Store = require('electron-store');
Store.initRenderer(); //让其在渲染进程中也能用
const schema = {
  mainTitle: {
    type: 'string',
    default: 'Electron-hiprint',
  },
  openAtLogin: {
    type: 'boolean',
    default: true,
  },
};

const store = new Store({ schema });
//渲染进程
const Store = require('electron-store');
const store = new Store();
document.title = store.get('mainTitle') || 'Electron-hiprint';

打包

build-m-arm64: Apple M1 或 M2 芯片

electron-builder -m --universal:同时支持 Intel(x64)和 ARM(arm64)架构

© 2026 转载请注明出处