我有一个 Electron 应用程序,我想将其分发到所有操作系统。
我的 Linux 发行版文件有问题。我已经测试了
.deb
文件和 .AppImage
文件。
问题是图标:如果我使用
.deb
文件在 Ubuntu 上运行我的应用程序,它会正确显示图标,但当我使用 .AppImage
时,它不会。
此外,当我在开发模式下运行它以及针对 Windows 和 macOS 发布时,该图标工作正常。
为什么会这样?
我的应用程序的源代码可以在这里
AppImage 有图标错误。您需要在主窗口中设置它。
const options = {
backgroundColor: '#fff',
width: 1200,
height: 800,
webPreferences: {
nativeWindowOpen: true,
nodeIntegration: true
}
}
if (process.platform === "linux") {
options.icon = path.join(`${__dirname}/icon/icon.png`);
}
mainWindow = new BrowserWindow(options);
我最近遇到了这个(我正在使用电子构建器)。这是使它最终起作用的方法(对我来说 Ubuntu 24.04)。
简化的main.js
[...]
let dirName = __dirname
if (app.isPackaged) dirName = path.join(process.resourcesPath)
if (process.platform === "win32") {
iconPath = path.join(dirName, "build", "icons", "win", "icon.ico")
} else if (process.platform === "linux") {
iconPath = path.join(dirName, "build", "icons", "png", "256x256.png")
} else if (process.platform === "darwin") {
iconPath = path.join(dirName, "build", "icons", "mac", "icon.icns")
}
const mainWindow = new BrowserWindow({
width: 1024,
height: 768,
title: `Your app title`,
icon: iconPath,
webPreferences: {
nodeIntegration: true,
// contextIsolation: false,
// preload: path.join(__dirname, "preload.js"),
},
})
简化的package.json
{
...
"main": "main.js",
"scripts": {
},
"build": {
...
"directories": {
"buildResources": "build",
"output": "dist"
},
"extraResources": [
{
"from": "./db/",
"to": "db/",
"filter": [
"**/*.*"
]
}
],
"files": [
"build/**/*",
...
],
"linux": {
"target": [
"AppImage",
"deb"
],
"category": "Education"
}
}
...
}
简化的项目结构
.
├── main.js
├── build
│ └── icons
│ ├── icon.png
│ ├── mac
│ │ └── icon.icns
│ ├── png
│ │ ├── 1024x1024.png
│ │ ├── 128x128.png
│ │ ├── 16x16.png
│ │ ├── 24x24.png
│ │ ├── 256x256.png
│ │ ├── 32x32.png
│ │ ├── 48x48.png
│ │ ├── 512x512.png
│ │ └── 64x64.png
│ ├── README.md
│ └── win
│ └── icon.ico
├── package.json
├── package-lock.json