bin.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. /**
  2. * ee-bin 配置
  3. * 仅适用于开发环境
  4. */
  5. module.exports = {
  6. /**
  7. * development serve ("frontend" "electron" )
  8. * ee-bin dev
  9. */
  10. dev: {
  11. frontend: {
  12. directory: './frontend',
  13. cmd: 'npm',
  14. args: ['run', 'dev'],
  15. // 与 frontend/.env 的 VITE_PORT 保持一致(vite strictPort,不会自动换端口)
  16. port: 3100,
  17. },
  18. electron: {
  19. directory: './',
  20. cmd: 'electron',
  21. args: ['.', '--env=local'],
  22. watch: true,
  23. delay: 1000,
  24. }
  25. },
  26. /**
  27. * 构建
  28. * ee-bin build
  29. */
  30. build: {
  31. frontend: {
  32. directory: './frontend',
  33. cmd: 'npm',
  34. args: ['run', 'build'],
  35. },
  36. electron: {
  37. /**
  38. * 构建方式
  39. * 'bundle' - 用 esbuild 打包成单文件(默认)
  40. * 'copy' - 原样复制 electron/ 目录,不做打包(不推荐使用)
  41. */
  42. bundleType: 'bundle',
  43. /**
  44. * 开发者自定义 external 包
  45. * 框架已内置: ee-core, ee-bin, electron, better-sqlite3, proxy-agent, pino-roll, pino-pretty
  46. * 如果你的项目引入了无法打包的库(如 native 模块),在此添加包名
  47. * 示例: external: ['sharp', 'node-gyp']
  48. */
  49. external: [],
  50. /**
  51. * Source map 配置(用于断点调试)
  52. * true | 'inline' - 源码嵌入 main.js,DevTools/VS Code 开箱即用(开发推荐)
  53. * 'external' - 生成 main.js.map 文件,生产环境可单独删除
  54. * false - 不生成 sourcemap(默认:dev→inline,prod→off)
  55. */
  56. sourcemap: false,
  57. /**
  58. * 压缩代码
  59. * true - 压缩空白、标识符、语法
  60. * false - 不压缩(默认)
  61. */
  62. minify: false,
  63. /**
  64. * 移除 console 和 debugger 语句(生产环境推荐)
  65. * 示例: drop: ['console', 'debugger']
  66. */
  67. drop: [],
  68. /**
  69. * 压缩时保留原始函数/类名(便于定位错误)
  70. * true - 保留名称(minify 时推荐开启)
  71. * false - 不保留(默认)
  72. */
  73. keepNames: false,
  74. /**
  75. * 第三方库 license 注释处理
  76. * 'inline' - 注释内联到每个文件
  77. * 'eof' - 注释移到文件末尾
  78. * 'none' - 移除所有注释(默认)
  79. */
  80. legalComments: 'none',
  81. /**
  82. * 自定义全局常量(编译时替换)
  83. * 示例: define: { 'process.env.MY_VERSION': '"1.0.0"' }
  84. */
  85. define: {},
  86. /**
  87. * 额外复制 electron/ 下的目录或文件到输出目录(不打包进 main.js,保持目录结构)
  88. * 框架已内置复制: jobs/, preload/bridge.js(不可移除)
  89. * 智能处理: .ts/.js/.mts/.cts/.tsx/.jsx 源码会被编译成 Node 可直接 require 的 CJS .js
  90. * (bundle:false,相对导入和 ee-core/* 仍保留为运行时 require);
  91. * 其它文件(如 .json、图片)原样复制
  92. * 适用场景: 静态资源,或不打包进 main.js、但需在运行时被 require()/child_process.fork() 加载的源码
  93. * 目录示例: copy: ['assets'] → electron/assets/ → public/electron/assets/(原样复制)
  94. * copy: ['workers'] → 编译 electron/workers/ → public/electron/workers/
  95. * 文件示例: copy: ['data/db.json'] → electron/data/db.json → public/electron/data/db.json(原样复制)
  96. * copy: ['scripts/task.ts']→ 编译 electron/scripts/task.ts → public/electron/scripts/task.js
  97. */
  98. copy: [],
  99. /**
  100. * 输出格式
  101. * 'cjs' - CommonJS(推荐,Electron 主进程最稳定的方式)
  102. * 'esm' - ES Module(需确保业务代码兼容 ESM,如 controller/service 的 registry require() 调用)
  103. * 默认: 'cjs'
  104. */
  105. format: 'cjs',
  106. },
  107. win64: {
  108. cmd: 'electron-builder',
  109. directory: './',
  110. args: ['--config=./cmd/builder.json', '-w=nsis', '--x64'],
  111. },
  112. win32: {
  113. args: ['--config=./cmd/builder.json', '-w=nsis', '--ia32'],
  114. },
  115. win_e: {
  116. args: ['--config=./cmd/builder.json', '-w=portable', '--x64'],
  117. },
  118. win_7z: {
  119. args: ['--config=./cmd/builder.json', '-w=7z', '--x64'],
  120. },
  121. mac: {
  122. args: ['--config=./cmd/builder-mac.json', '-m'],
  123. },
  124. mac_arm64: {
  125. args: ['--config=./cmd/builder-mac-arm64.json', '-m', '--arm64'],
  126. },
  127. linux: {
  128. args: ['--config=./cmd/builder-linux.json', '-l=deb', '--x64'],
  129. },
  130. linux_arm64: {
  131. args: ['--config=./cmd/builder-linux.json', '-l=deb', '--arm64'],
  132. },
  133. go_w: {
  134. directory: './go',
  135. cmd: 'go',
  136. args: ['build', '-o=../build/extraResources/goapp.exe'],
  137. },
  138. go_m: {
  139. directory: './go',
  140. cmd: 'go',
  141. args: ['build', '-o=../build/extraResources/goapp'],
  142. },
  143. go_l: {
  144. directory: './go',
  145. cmd: 'go',
  146. args: ['build', '-o=../build/extraResources/goapp'],
  147. },
  148. python: {
  149. directory: './python',
  150. cmd: 'python',
  151. args: ['./setup.py', 'build'],
  152. },
  153. },
  154. /**
  155. * 移动资源
  156. * ee-bin move
  157. */
  158. move: {
  159. frontend_dist: {
  160. src: './frontend/dist',
  161. dest: './public/dist'
  162. },
  163. go_static: {
  164. src: './frontend/dist',
  165. dest: './go/public/dist'
  166. },
  167. go_config: {
  168. src: './go/config',
  169. dest: './go/public/config'
  170. },
  171. go_package: {
  172. src: './package.json',
  173. dest: './go/public/package.json'
  174. },
  175. go_images: {
  176. src: './public/images',
  177. dest: './go/public/images'
  178. },
  179. python_dist: {
  180. src: './python/dist',
  181. dest: './build/extraResources/py'
  182. },
  183. },
  184. /**
  185. * 预发布模式(prod)
  186. * ee-bin start
  187. */
  188. start: {
  189. directory: './',
  190. cmd: 'electron',
  191. args: ['.', '--env=prod']
  192. },
  193. /**
  194. * 加密
  195. */
  196. encrypt: {
  197. frontend: {
  198. type: 'none',
  199. files: [
  200. './public/dist/**/*.(js|json)',
  201. ],
  202. cleanFiles: ['./public/dist'],
  203. confusionOptions: {
  204. compact: true,
  205. stringArray: true,
  206. stringArrayEncoding: ['none'],
  207. stringArrayCallsTransform: true,
  208. numbersToExpressions: true,
  209. target: 'browser',
  210. },
  211. silent: true,
  212. },
  213. electron: {
  214. // Encryption type: 'confusion' | 'bytecode' | 'strict' | 'none'
  215. type: 'confusion',
  216. files: [
  217. './public/electron/**/*.(js|json)',
  218. ],
  219. cleanFiles: ['./public/electron'],
  220. specificFiles: [
  221. './public/electron/main.js',
  222. './public/electron/preload/bridge.js',
  223. ],
  224. confusionOptions: {
  225. compact: true,
  226. stringArray: true,
  227. stringArrayEncoding: ['none'],
  228. deadCodeInjection: false,
  229. stringArrayCallsTransform: true,
  230. numbersToExpressions: true,
  231. target: 'node',
  232. },
  233. silent: true,
  234. }
  235. },
  236. /**
  237. * 执行自定义命令
  238. * ee-bin exec
  239. */
  240. exec: {
  241. // 单独调试,air 实现 go 热重载
  242. go: {
  243. directory: './go',
  244. cmd: 'air',
  245. args: ['-c=config/.air.toml' ],
  246. },
  247. // windows 单独调试,air 实现 go 热重载
  248. go_w: {
  249. directory: './go',
  250. cmd: 'air',
  251. args: ['-c=config/.air.windows.toml' ],
  252. },
  253. // 单独调试,以基础方式启动 go
  254. go2: {
  255. directory: './go',
  256. cmd: 'go',
  257. args: ['run', './main.go', '--env=dev','--basedir=../', '--port=7073'],
  258. },
  259. python: {
  260. directory: './python',
  261. cmd: 'python',
  262. args: ['./main.py', '--port=7074'],
  263. stdio: "inherit", // ignore
  264. },
  265. },
  266. };