electron-builder.cjs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /**
  2. * @type {import('app-builder-lib').Configuration}
  3. * @see https://www.electron.build/configuration/configuration
  4. */
  5. require('dotenv').config()
  6. const pkg = require('./package.json')
  7. const buildNumber = process.env.VITE_APP_BUILD_NUMBER || '0'
  8. const os = require('os')
  9. const path = require('path')
  10. // Fix: electron-builder downloads dmg-builder via @electron/get which incorrectly
  11. // uses ELECTRON_MIRROR for all downloads, causing 404 on npmmirror.
  12. // Use local cached dmgbuild binary directly to bypass the download entirely.
  13. if (!process.env.CUSTOM_DMGBUILD_PATH) {
  14. const dmgbuildPath = path.join(
  15. os.homedir(),
  16. 'Library/Caches/electron-builder/dmg-builder@1.2.0/dmgbuild'
  17. )
  18. process.env.CUSTOM_DMGBUILD_PATH = dmgbuildPath
  19. }
  20. module.exports = {
  21. // --- 基础配置 ---
  22. appId: 'com.zycoo.scas-tool-v2',
  23. productName: 'Scas Tool',
  24. buildVersion: buildNumber, // 映射到 CFBundleVersion (Mac) 和 FileVersion (Win)
  25. buildNumber: buildNumber,
  26. directories: {
  27. buildResources: 'build',
  28. output: 'dist'
  29. },
  30. // --- 钩子脚本 ---
  31. afterAllArtifactBuild: 'build/notarize-dmg.cjs',
  32. // --- 文件包含与忽略 ---
  33. files: [
  34. '!**/.idea/*',
  35. '!**/.vscode/*',
  36. '!src/*',
  37. '!electron.vite.config.{js,ts,mjs,cjs}',
  38. '!vite.config.web.{js,ts,mjs,cjs}',
  39. '!{.eslintcache,eslint.config.mjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}',
  40. '!{.env,.env.*,.npmrc,pnpm-lock.yaml}',
  41. '!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}',
  42. // --- 体积优化:Vite 已按需打包所需代码,asar 中无需保留完整依赖包 ---
  43. '!node_modules/@vicons/**',
  44. '!node_modules/echarts/lib/chart/map/**',
  45. '!node_modules/echarts/lib/component/dataZoom/**',
  46. '!node_modules/echarts/lib/component/toolbox/**',
  47. '!node_modules/echarts/lib/component/visualMap/**',
  48. '!node_modules/echarts/lib/component/graphic/**',
  49. '!node_modules/echarts/lib/component/title/**',
  50. '!node_modules/echarts/lib/component/tooltip/**',
  51. '!node_modules/echarts/lib/component/axis/**',
  52. '!node_modules/echarts/lib/component/grid/**',
  53. '!node_modules/echarts/lib/renderer/**',
  54. // naive-ui 源码已被 Vite 打包进 renderer JS,asar 中无需保留完整 es/lib 目录
  55. '!node_modules/naive-ui/es/**',
  56. '!node_modules/naive-ui/lib/**',
  57. ],
  58. asarUnpack: ['resources/**'],
  59. // --- Windows 配置 ---
  60. win: {
  61. executableName: 'Scas Tool',
  62. // 注意:JS中引用内部变量需加反斜杠转义 \${...},引用JS变量则直接用 ${buildNumber}
  63. artifactName: `\${name}-${pkg.version}.${buildNumber}-setup-\${arch}.\${ext}`,
  64. target: [{ target: 'nsis', arch: ['ia32', 'x64'] }]
  65. },
  66. nsis: {
  67. artifactName: `\${name}-${pkg.version}.${buildNumber}-setup-\${arch}.\${ext}`,
  68. shortcutName: 'Scas Tool',
  69. oneClick: false, // 取消一键安装,允许用户选择
  70. allowToChangeInstallationDirectory: true, // 允许用户修改安装路径
  71. perMachine: true, // true 为安装到 Program Files,false 为 AppData
  72. createDesktopShortcut: true,
  73. createStartMenuShortcut: true,
  74. uninstallDisplayName: 'Scas Tool',
  75. deleteAppDataOnUninstall: false,
  76. },
  77. // --- macOS 配置 ---
  78. mac: {
  79. notarize: false, // 使用自定义 build/notarize-dmg.cjs 进行公证
  80. hardenedRuntime: true,
  81. entitlements: 'build/entitlements.mac.plist',
  82. entitlementsInherit: 'build/entitlements.mac.plist',
  83. extendInfo: {
  84. NSMicrophoneUsageDescription: "Application requests access to the device's microphone.",
  85. NSDocumentsFolderUsageDescription:
  86. "Application requests access to the user's Documents folder.",
  87. NSDownloadsFolderUsageDescription:
  88. "Application requests access to the user's Downloads folder.",
  89. CFBundleVersion: buildNumber,
  90. CFBundleDevelopmentRegion: 'en',
  91. CFBundleLocalizations: ['en', 'zh_CN']
  92. },
  93. target: [{ target: 'dmg', arch: ['x64', 'arm64'] }]
  94. },
  95. dmg: {
  96. artifactName: `\${name}-${pkg.version}.${buildNumber}-\${arch}.\${ext}`
  97. },
  98. // --- Linux 配置 ---
  99. linux: {
  100. target: ['AppImage', 'snap', 'deb'],
  101. maintainer: 'zycoo.com',
  102. category: 'Utility',
  103. artifactName: `\${name}-${pkg.version}.${buildNumber}.\${ext}`
  104. },
  105. appImage: {
  106. artifactName: `\${name}-${pkg.version}.${buildNumber}.\${ext}`
  107. },
  108. snap: {
  109. artifactName: `\${name}-${pkg.version}.${buildNumber}.\${ext}`
  110. },
  111. deb: {
  112. artifactName: `\${name}-${pkg.version}.${buildNumber}-\${arch}.\${ext}`
  113. },
  114. // --- 其他性能/下载配置 ---
  115. npmRebuild: false,
  116. electronDownload: {
  117. mirror: 'https://npmmirror.com/mirrors/electron/'
  118. }
  119. }