From 37482bca7b1c2088fe1192f848be52b70235c48c Mon Sep 17 00:00:00 2001 From: lizhixuan Date: Mon, 12 May 2025 23:37:11 +0800 Subject: [PATCH] feat: refactor electron and vitest configuration for dynamic imports and improved structure - Updated electron.vite.config.ts to use dynamic imports for Tailwind CSS. - Refactored vitest.config.ts to asynchronously retrieve renderer configuration from electron.vite.config. - Enhanced plugin and alias management for better maintainability and performance. --- electron.vite.config.ts | 135 ++++++++++++++++++++-------------------- vitest.config.ts | 90 ++++++++++++++------------- 2 files changed, 115 insertions(+), 110 deletions(-) diff --git a/electron.vite.config.ts b/electron.vite.config.ts index 9ee55685b1..e2106131ff 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -1,4 +1,3 @@ -import tailwindcss from '@tailwindcss/vite' import react from '@vitejs/plugin-react-swc' import { defineConfig, externalizeDepsPlugin } from 'electron-vite' import { resolve } from 'path' @@ -6,75 +5,77 @@ import { visualizer } from 'rollup-plugin-visualizer' const visualizerPlugin = (type: 'renderer' | 'main') => { return process.env[`VISUALIZER_${type.toUpperCase()}`] ? [visualizer({ open: true })] : [] } - -export default defineConfig({ - main: { - plugins: [ - externalizeDepsPlugin({ - exclude: [ - '@cherrystudio/embedjs', - '@cherrystudio/embedjs-openai', - '@cherrystudio/embedjs-loader-web', - '@cherrystudio/embedjs-loader-markdown', - '@cherrystudio/embedjs-loader-msoffice', - '@cherrystudio/embedjs-loader-xml', - '@cherrystudio/embedjs-loader-pdf', - '@cherrystudio/embedjs-loader-sitemap', - '@cherrystudio/embedjs-libsql', - '@cherrystudio/embedjs-loader-image', - 'p-queue', - 'webdav' - ] - }), - ...visualizerPlugin('main') - ], - resolve: { - alias: { - '@main': resolve('src/main'), - '@types': resolve('src/renderer/src/types'), - '@shared': resolve('packages/shared') - } - }, - build: { - rollupOptions: { - external: ['@libsql/client'] - } - } - }, - preload: { - plugins: [externalizeDepsPlugin()], - resolve: { - alias: { - '@shared': resolve('packages/shared') - } - } - }, - renderer: { - plugins: [ - tailwindcss(), - react({ - plugins: [ - [ - '@swc/plugin-styled-components', - { - displayName: true, // 开发环境下启用组件名称 - fileName: false, // 不在类名中包含文件名 - pure: true, // 优化性能 - ssr: false // 不需要服务端渲染 - } +export default defineConfig(async () => { + const tailwindcssPlugin = (await import('@tailwindcss/vite')).default // 动态导入 + return { + main: { + plugins: [ + externalizeDepsPlugin({ + exclude: [ + '@cherrystudio/embedjs', + '@cherrystudio/embedjs-openai', + '@cherrystudio/embedjs-loader-web', + '@cherrystudio/embedjs-loader-markdown', + '@cherrystudio/embedjs-loader-msoffice', + '@cherrystudio/embedjs-loader-xml', + '@cherrystudio/embedjs-loader-pdf', + '@cherrystudio/embedjs-loader-sitemap', + '@cherrystudio/embedjs-libsql', + '@cherrystudio/embedjs-loader-image', + 'p-queue', + 'webdav' ] - ] - }), - ...visualizerPlugin('renderer') - ], - resolve: { - alias: { - '@renderer': resolve('src/renderer/src'), - '@shared': resolve('packages/shared') + }), + ...visualizerPlugin('main') + ], + resolve: { + alias: { + '@main': resolve('src/main'), + '@types': resolve('src/renderer/src/types'), + '@shared': resolve('packages/shared') + } + }, + build: { + rollupOptions: { + external: ['@libsql/client'] + } } }, - optimizeDeps: { - exclude: [] + preload: { + plugins: [externalizeDepsPlugin()], + resolve: { + alias: { + '@shared': resolve('packages/shared') + } + } + }, + renderer: { + plugins: [ + react({ + plugins: [ + [ + '@swc/plugin-styled-components', + { + displayName: true, // 开发环境下启用组件名称 + fileName: false, // 不在类名中包含文件名 + pure: true, // 优化性能 + ssr: false // 不需要服务端渲染 + } + ] + ] + }), + tailwindcssPlugin(), + ...visualizerPlugin('renderer') + ], + resolve: { + alias: { + '@renderer': resolve('src/renderer/src'), + '@shared': resolve('packages/shared') + } + }, + optimizeDeps: { + exclude: [] + } } } }) diff --git a/vitest.config.ts b/vitest.config.ts index abaeb82320..023a3d08c9 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -2,52 +2,56 @@ import { defineConfig } from 'vitest/config' import electronViteConfig from './electron.vite.config' -const rendererConfig = electronViteConfig.renderer +// const rendererConfig = electronViteConfig.renderer -export default defineConfig({ +export default defineConfig(async () => { + const rendererConfig = (await electronViteConfig()).renderer + console.log('rendererConfig', rendererConfig) // 复用 renderer 插件和路径别名 - plugins: rendererConfig.plugins, - resolve: { - alias: rendererConfig.resolve.alias - }, - test: { - environment: 'jsdom', - globals: true, - setupFiles: [], - include: [ - // 只测试渲染进程 - 'src/renderer/**/*.{test,spec}.{ts,tsx}', - 'src/renderer/**/__tests__/**/*.{ts,tsx}' - ], - exclude: ['**/node_modules/**', '**/dist/**', '**/out/**', '**/build/**'], - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html', 'lcov'], - exclude: [ - '**/node_modules/**', - '**/dist/**', - '**/out/**', - '**/build/**', - '**/coverage/**', - '**/.yarn/**', - '**/.cursor/**', - '**/.vscode/**', - '**/.github/**', - '**/.husky/**', - '**/*.d.ts', - '**/types/**', - '**/__tests__/**', - '**/*.{test,spec}.{ts,tsx}', - '**/*.config.{js,ts}', - '**/electron.vite.config.ts', - '**/vitest.config.ts' - ] + return { + plugins: rendererConfig.plugins, + resolve: { + alias: rendererConfig.resolve.alias }, - testTimeout: 20000, - pool: 'threads', - poolOptions: { - threads: { - singleThread: false + test: { + environment: 'jsdom', + globals: true, + setupFiles: [], + include: [ + // 只测试渲染进程 + 'src/renderer/**/*.{test,spec}.{ts,tsx}', + 'src/renderer/**/__tests__/**/*.{ts,tsx}' + ], + exclude: ['**/node_modules/**', '**/dist/**', '**/out/**', '**/build/**'], + coverage: { + provider: 'v8', + reporter: ['text', 'json', 'html', 'lcov'], + exclude: [ + '**/node_modules/**', + '**/dist/**', + '**/out/**', + '**/build/**', + '**/coverage/**', + '**/.yarn/**', + '**/.cursor/**', + '**/.vscode/**', + '**/.github/**', + '**/.husky/**', + '**/*.d.ts', + '**/types/**', + '**/__tests__/**', + '**/*.{test,spec}.{ts,tsx}', + '**/*.config.{js,ts}', + '**/electron.vite.config.ts', + '**/vitest.config.ts' + ] + }, + testTimeout: 20000, + pool: 'threads', + poolOptions: { + threads: { + singleThread: false + } } } }