Files
xk-admin/apps/desktop/electron-builder.config.cjs

79 lines
3.2 KiB
JavaScript
Raw Normal View History

/**
* electron-builder 打包配置
* JS 配置而不是 ymlmac 公证需要按环境变量是否配齐动态开关
*
* 签名策略按需求做成条件化未配置证书时出未签名包且构建不报错
* - Windows / mac 代码签名配置了 CSC_LINK + CSC_KEY_PASSWORD mac 钥匙串里有
* Developer ID 证书 electron-builder 自动签名否则自动跳过只输出告警
* - mac 公证APPLE_ID + APPLE_APP_SPECIFIC_PASSWORD + APPLE_TEAM_ID 三者齐全才启用
* - 未签名 mac 包仍可内部分发首次打开需右键打开且自动更新会降级为提示手动下载
*/
const canNotarize = Boolean(
process.env.APPLE_ID &&
process.env.APPLE_APP_SPECIFIC_PASSWORD &&
process.env.APPLE_TEAM_ID,
);
/** @type {import('electron-builder').Configuration} */
const config = {
// appId 必须与主进程 setAppUserModelId 一致,否则 Windows 系统通知不显示
appId: 'com.xiaokang.xkadmin',
productName: '萧康云医',
// 安装包文件名用 ASCII避免中文名在静态托管/下载链接上出编码问题
artifactName: 'xk-desktop-${version}-${os}-${arch}.${ext}',
directories: {
output: 'release',
buildResources: 'resources',
},
files: ['out/**'],
extraResources: [
// web-antd 生产构建产物:放 resources/web不进 asar为后续渲染层热更新留路
{ from: '../web-antd/dist', to: 'web' },
// 应用图标供运行时使用托盘、Windows 窗口图标)
{ from: 'resources/icon.png', to: 'icon.png' },
],
asar: true,
compression: 'normal',
win: {
// TODO(待确认):正式图标待提供,当前用 web-antd logo 预生成的 ico 占位
// 直接给 .ico 让 builder 跳过 png 转换(本机 builder 的 wasm 图标工具会报内存错误)
icon: 'resources/icon.ico',
target: [{ target: 'nsis', arch: ['x64'] }],
},
nsis: {
// 非一键安装:允许用户选择安装目录,符合企业内部软件分发习惯
oneClick: false,
perMachine: false,
allowToChangeInstallationDirectory: true,
createDesktopShortcut: true,
createStartMenuShortcut: true,
shortcutName: '萧康云医',
},
mac: {
icon: 'resources/icon.png',
category: 'public.app-category.medical',
// dmg 给用户安装zip 是 electron-updater 在 mac 自动更新的必需格式,缺一不可
target: [
{ target: 'dmg', arch: ['x64', 'arm64'] },
{ target: 'zip', arch: ['x64', 'arm64'] },
],
hardenedRuntime: true,
gatekeeperAssess: false,
entitlements: 'resources/entitlements.mac.plist',
entitlementsInherit: 'resources/entitlements.mac.plist',
// IM 音视频通话必需的隐私用途描述,缺失时 mac 上调用摄像头/麦克风直接崩溃
extendInfo: {
NSCameraUsageDescription: '视频问诊需要使用摄像头',
NSMicrophoneUsageDescription: '语音/视频通话需要使用麦克风',
},
notarize: canNotarize,
},
publish: {
provider: 'generic',
// TODO(待确认):更新包静态托管地址,需与主进程 config.ts 的 DOWNLOAD_PAGE_URL 保持一致
url: 'https://static.xiaokang88.com/xk-desktop/',
},
};
module.exports = config;