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 被外部程序(如浏览器、其他应用)调用。📌 典型应用场景
- 点击网页上的链接,打开 Electron 应用
- 例如:在网页上点击
hiprint://open?file=test.pdf,Electron 应用会启动并接收参数"file=test.pdf"。
- 例如:在网页上点击
- 深度链接(Deep Linking)
- 适用于桌面应用与 Web 端或移动端的交互,例如:
- 你在 浏览器 或 微信 中点击
hiprint://open?id=123,Electron 应用会打开并处理id=123。
- 你在 浏览器 或 微信 中点击
- 适用于桌面应用与 Web 端或移动端的交互,例如:
- 与其他软件通信
- 其他软件可以调用
hiprint://do-something来控制 Electron 应用,比如启动某个特定功能。
- 其他软件可以调用
- 用户身份验证(OAuth 登录回调)
- 比如你的 Electron 应用需要使用 Google 登录,OAuth 服务器可以重定向回
hiprint://auth-success?token=abc123。
- 比如你的 Electron 应用需要使用 Google 登录,OAuth 服务器可以重定向回
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', ...)处理。 - 点击网页上的链接,打开 Electron 应用
开机启动不生效?
开机启动设置
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)架构