mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-27 04:31:27 +08:00
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.
This commit is contained in:
parent
184713dba8
commit
37482bca7b
@ -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: []
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user