From fcf78cdd0847c3e631102bfef2c430af33bfeeff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=95=E5=B1=82=E7=94=A8=E6=88=B7?= Date: Fri, 17 Oct 2025 17:26:48 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A6=84=20refactor:=20electron-builder=20t?= =?UTF-8?q?o=20ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron-builder.config.ts | 170 +++++++++++++++++++++++++++++++++++++ electron-builder.yml | 137 ------------------------------ package.json | 7 +- public/icons/logo.ico | Bin 0 -> 12580 bytes public/logo.ico | Bin 0 -> 12580 bytes 5 files changed, 173 insertions(+), 141 deletions(-) create mode 100644 electron-builder.config.ts delete mode 100644 electron-builder.yml create mode 100644 public/icons/logo.ico create mode 100644 public/logo.ico diff --git a/electron-builder.config.ts b/electron-builder.config.ts new file mode 100644 index 0000000..f6ca182 --- /dev/null +++ b/electron-builder.config.ts @@ -0,0 +1,170 @@ +import type { Configuration } from "electron-builder"; + +const config: Configuration = { + // 应用程序的唯一标识符 + appId: "com.imsyy.splayer", + // 应用程序的产品名称 + productName: "SPlayer", + copyright: "Copyright © imsyy 2023", + // 构建资源所在的目录 + directories: { + buildResources: "build", + }, + // 包含在最终应用程序构建中的文件列表 + // 使用通配符 ! 表示排除不需要的文件 + files: [ + "public/**", + "out/**", + "!**/.vscode/*", + "!src/*", + "!electron.vite.config.{js,ts,mjs,cjs}", + "!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}", + "!{.env,.env.*,.npmrc,pnpm-lock.yaml}", + ], + // 哪些文件将不会被压缩,而是解压到构建目录 + asarUnpack: ["public/**"], + win: { + // 可执行文件名 + executableName: "SPlayer", + // 应用程序的图标文件路径 + icon: "public/icons/logo.ico", + // Windows 平台全局文件名模板 + artifactName: "${productName}-${version}-${arch}.${ext}", + // 是否对可执行文件进行签名和编辑 + // signAndEditExecutable: false, + // 构建类型(架构由命令行参数 --x64 或 --arm64 指定) + target: [ + // 安装版 + { + target: "nsis", + arch: ["x64", "arm64"], + }, + // 打包版 + { + target: "portable", + arch: ["x64", "arm64"], + }, + ], + }, + // NSIS 安装器配置 + nsis: { + // 是否一键式安装 + oneClick: false, + // 安装程序的生成名称 + artifactName: "${productName}-${version}-${arch}-setup.${ext}", + // 创建的桌面快捷方式名称 + shortcutName: "${productName}", + // 卸载时显示的名称 + uninstallDisplayName: "${productName}", + // 创建桌面图标 + createDesktopShortcut: "always", + // 是否允许 UAC 提升权限 + allowElevation: true, + // 是否允许用户更改安装目录 + allowToChangeInstallationDirectory: true, + // 安装包图标 + installerIcon: "public/icons/favicon.ico", + // 卸载命令图标 + uninstallerIcon: "public/icons/favicon.ico", + }, + // Portable 便携版配置 + portable: { + // 便携版文件名 + artifactName: "${productName}-${version}-${arch}-portable.${ext}", + }, + // macOS 平台配置 + mac: { + // 可执行文件名 + executableName: "SPlayer", + // 应用程序的图标文件路径 + icon: "public/icons/favicon-512x512.png", + // 权限继承的文件路径 + entitlementsInherit: "build/entitlements.mac.plist", + // macOS 平台全局文件名模板 + artifactName: "${productName}-${version}-${arch}.${ext}", + // 扩展信息,如权限描述 + extendInfo: { + NSCameraUsageDescription: "Application requests access to the device's camera.", + NSMicrophoneUsageDescription: "Application requests access to the device's microphone.", + NSDocumentsFolderUsageDescription: + "Application requests access to the user's Documents folder.", + NSDownloadsFolderUsageDescription: + "Application requests access to the user's Downloads folder.", + }, + // 是否启用应用程序的 Notarization(苹果的安全审核) + notarize: false, + darkModeSupport: true, + category: "public.app-category.music", + target: [ + // DMG 安装版 + { + target: "dmg", + arch: ["x64", "arm64"], + }, + // 压缩包安装版 + { + target: "zip", + arch: ["x64", "arm64"], + }, + ], + }, + // Linux 平台配置 + linux: { + // 可执行文件名 + executableName: "SPlayer", + // 应用程序的图标文件路径 + icon: "public/icons/favicon-512x512.png", + // Linux 所有格式的统一文件名模板 + artifactName: "${name}-${version}-${arch}.${ext}", + // 构建类型 - 支持 x64 和 ARM64 架构 + target: [ + // Pacman 包管理器 + { + target: "pacman", + arch: ["x64", "arm64"], + }, + // AppImage 格式 + { + target: "AppImage", + arch: ["x64", "arm64"], + }, + // Debian 包管理器 + { + target: "deb", + arch: ["x64", "arm64"], + }, + // RPM 包管理器 + { + target: "rpm", + arch: ["x64", "arm64"], + }, + // Snap 包管理器(仅支持 x64 架构) + { + target: "snap", + arch: ["x64"], + }, + // 压缩包格式 + { + target: "tar.gz", + arch: ["x64", "arm64"], + }, + ], + // 维护者信息 + maintainer: "imsyy.top", + // 应用程序类别 + category: "Audio;Music", + }, + // AppImage 特定配置 + appImage: { + // AppImage 文件的生成名称 + artifactName: "${name}-${version}-${arch}.${ext}", + }, + // 是否在构建之前重新编译原生模块 + npmRebuild: false, + // Electron 下载镜像配置 + electronDownload: { + mirror: "https://npmmirror.com/mirrors/electron/", + }, +}; + +export default config; diff --git a/electron-builder.yml b/electron-builder.yml deleted file mode 100644 index 8edba91..0000000 --- a/electron-builder.yml +++ /dev/null @@ -1,137 +0,0 @@ -# 应用程序的唯一标识符 -appId: com.imsyy.splayer -# 应用程序的产品名称 -productName: SPlayer -copyright: Copyright © imsyy 2023 -# 构建资源所在的目录 -directories: - buildResources: public -# 包含在最终应用程序构建中的文件列表 -# 使用通配符 ! 表示排除不需要的文件 -files: - - "public/**" - - "out/**" - - "!**/.vscode/*" - - "!src/*" - - "!electron.vite.config.{js,ts,mjs,cjs}" - - "!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}" - - "!{.env,.env.*,.npmrc,pnpm-lock.yaml}" -# 哪些文件将不会被压缩,而是解压到构建目录 -asarUnpack: - - public/** -win: - # 可执行文件名 - executableName: SPlayer - # 应用程序的图标文件路径 - icon: public/icons/favicon-512x512.png - # Windows 平台全局文件名模板 - artifactName: ${productName}-${version}-${arch}.${ext} - # 是否对可执行文件进行签名和编辑 - signAndEditExecutable: false - # 构建类型(架构由命令行参数 --x64 或 --arm64 指定) - target: - # 安装版 - - nsis - # 打包版 - - portable -# NSIS 安装器配置 -nsis: - # 是否一键式安装 - oneClick: false - # 安装程序的生成名称 - artifactName: ${productName}-${version}-${arch}-setup.${ext} - # 创建的桌面快捷方式名称 - shortcutName: ${productName} - # 卸载时显示的名称 - uninstallDisplayName: ${productName} - # 创建桌面图标 - createDesktopShortcut: always - # 是否允许 UAC 提升权限 - allowElevation: true - # 是否允许用户更改安装目录 - allowToChangeInstallationDirectory: true - # 安装包图标 - installerIcon: public/icons/favicon.ico - # 卸载命令图标 - uninstallerIcon: public/icons/favicon.ico -# Portable 便携版配置 -portable: - # 便携版文件名 - artifactName: ${productName}-${version}-${arch}-portable.${ext} -# macOS 平台配置 -mac: - # 可执行文件名 - executableName: SPlayer - # 应用程序的图标文件路径 - icon: public/icons/favicon-512x512.png - # 权限继承的文件路径 - entitlementsInherit: build/entitlements.mac.plist - # macOS 平台全局文件名模板 - artifactName: ${name}-${version}-${arch}.${ext} - # 扩展信息,如权限描述 - extendInfo: - NSCameraUsageDescription: Application requests access to the device's camera. - NSMicrophoneUsageDescription: Application requests access to the device's microphone. - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder. - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder. - # 是否启用应用程序的 Notarization(苹果的安全审核) - notarize: false - darkModeSupport: true - category: public.app-category.music - target: - - target: dmg - arch: - - x64 - - arm64 - - target: zip - arch: - - x64 - - arm64 -# macOS 平台的 DMG 配置 -dmg: - # DMG 文件的生成名称 - artifactName: ${name}-${version}-${arch}.${ext} -# Linux 平台配置 -linux: - # 可执行文件名 - executableName: splayer - # 应用程序的图标文件路径 - icon: public/icons/favicon-512x512.png - # Linux 所有格式的统一文件名模板 - artifactName: ${name}-${version}-${arch}.${ext} - # 构建类型 - 支持 x64 和 ARM64 架构 - target: - - target: pacman - arch: - - x64 - - arm64 - - target: AppImage - arch: - - x64 - - arm64 - - target: deb - arch: - - x64 - - arm64 - - target: rpm - arch: - - x64 - - arm64 - # Snap 仅支持 x64 架构(无法在 x64 主机上交叉编译 ARM64) - - target: snap - arch: - - x64 - - target: tar.gz - arch: - - x64 - - arm64 - # 维护者信息 - maintainer: imsyy.top - # 应用程序类别 - category: Audio;Music -# AppImage 特定配置 -appImage: - # AppImage 文件的生成名称 - artifactName: ${name}-${version}-${arch}.${ext} -# 是否在构建之前重新编译原生模块 -npmRebuild: false diff --git a/package.json b/package.json index 896a641..582e45d 100644 --- a/package.json +++ b/package.json @@ -28,10 +28,9 @@ "postinstall": "electron-builder install-app-deps", "build:web": "npm run build", "build:unpack": "npm run build && electron-builder --dir", - "build:win": "npm run build && electron-builder --win", - "build:mac": "npm run build && electron-builder --mac", - "build:linux": "npm run build && electron-builder --linux", - "build:publish": "electron-builder --publish=always" + "build:win": "npm run build && electron-builder --win --config electron-builder.config.ts", + "build:mac": "npm run build && electron-builder --mac --config electron-builder.config.ts", + "build:linux": "npm run build && electron-builder --linux --config electron-builder.config.ts" }, "dependencies": { "@applemusic-like-lyrics/core": "^0.1.3", diff --git a/public/icons/logo.ico b/public/icons/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..6e280998b16ffd96b08b4cf067ea541e7a2d7cd6 GIT binary patch literal 12580 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 R$p0JwDRFtRN>RhW{{w~~Zk7N5 literal 0 HcmV?d00001 diff --git a/public/logo.ico b/public/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..6e280998b16ffd96b08b4cf067ea541e7a2d7cd6 GIT binary patch literal 12580 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 R$p0JwDRFtRN>RhW{{w~~Zk7N5 literal 0 HcmV?d00001