mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-09 23:10:20 +08:00
- Introduced a new path alias '@test-mocks' in TypeScript configuration files to simplify the import of mock utilities across the project. - Updated relevant files to utilize the new alias, enhancing code readability and maintainability. - Enhanced the README for test mocks to document the new import path, providing clearer guidance for developers on using mock utilities.
149 lines
5.2 KiB
TypeScript
149 lines
5.2 KiB
TypeScript
import react from '@vitejs/plugin-react-swc'
|
|
import { CodeInspectorPlugin } from 'code-inspector-plugin'
|
|
import { defineConfig } from 'electron-vite'
|
|
import { resolve } from 'path'
|
|
import { visualizer } from 'rollup-plugin-visualizer'
|
|
|
|
// assert not supported by biome
|
|
// import pkg from './package.json' assert { type: 'json' }
|
|
import pkg from './package.json'
|
|
|
|
const visualizerPlugin = (type: 'renderer' | 'main') => {
|
|
return process.env[`VISUALIZER_${type.toUpperCase()}`] ? [visualizer({ open: true })] : []
|
|
}
|
|
|
|
const isDev = process.env.NODE_ENV === 'development'
|
|
const isProd = process.env.NODE_ENV === 'production'
|
|
|
|
export default defineConfig({
|
|
main: {
|
|
plugins: [...visualizerPlugin('main')],
|
|
resolve: {
|
|
alias: {
|
|
'@main': resolve('src/main'),
|
|
'@types': resolve('src/renderer/src/types'),
|
|
'@data': resolve('src/main/data'),
|
|
'@shared': resolve('packages/shared'),
|
|
'@logger': resolve('src/main/services/LoggerService'),
|
|
'@mcp-trace/trace-core': resolve('packages/mcp-trace/trace-core'),
|
|
'@mcp-trace/trace-node': resolve('packages/mcp-trace/trace-node'),
|
|
'@test-mocks': resolve('tests/__mocks__')
|
|
}
|
|
},
|
|
build: {
|
|
rollupOptions: {
|
|
external: ['bufferutil', 'utf-8-validate', 'electron', ...Object.keys(pkg.dependencies)],
|
|
output: {
|
|
manualChunks: undefined, // 彻底禁用代码分割 - 返回 null 强制单文件打包
|
|
inlineDynamicImports: true // 内联所有动态导入,这是关键配置
|
|
},
|
|
onwarn(warning, warn) {
|
|
if (warning.code === 'COMMONJS_VARIABLE_IN_ESM') return
|
|
warn(warning)
|
|
}
|
|
},
|
|
sourcemap: isDev
|
|
},
|
|
esbuild: isProd ? { legalComments: 'none' } : {},
|
|
optimizeDeps: {
|
|
noDiscovery: isDev
|
|
}
|
|
},
|
|
preload: {
|
|
plugins: [
|
|
react({
|
|
tsDecorators: true
|
|
})
|
|
],
|
|
resolve: {
|
|
alias: {
|
|
'@shared': resolve('packages/shared'),
|
|
'@mcp-trace/trace-core': resolve('packages/mcp-trace/trace-core')
|
|
}
|
|
},
|
|
build: {
|
|
sourcemap: isDev,
|
|
rollupOptions: {
|
|
// Unlike renderer which auto-discovers entries from HTML files,
|
|
// preload requires explicit entry point configuration for multiple scripts
|
|
input: {
|
|
index: resolve(__dirname, 'src/preload/index.ts'),
|
|
simplest: resolve(__dirname, 'src/preload/simplest.ts') // Minimal preload
|
|
},
|
|
external: ['electron'],
|
|
output: {
|
|
entryFileNames: '[name].js',
|
|
format: 'cjs'
|
|
}
|
|
}
|
|
}
|
|
},
|
|
renderer: {
|
|
plugins: [
|
|
(async () => (await import('@tailwindcss/vite')).default())(),
|
|
react({
|
|
tsDecorators: true,
|
|
plugins: [
|
|
[
|
|
'@swc/plugin-styled-components',
|
|
{
|
|
displayName: true, // 开发环境下启用组件名称
|
|
fileName: false, // 不在类名中包含文件名
|
|
pure: true, // 优化性能
|
|
ssr: false // 不需要服务端渲染
|
|
}
|
|
]
|
|
]
|
|
}),
|
|
...(isDev ? [CodeInspectorPlugin({ bundler: 'vite' })] : []), // 只在开发环境下启用 CodeInspectorPlugin
|
|
...visualizerPlugin('renderer')
|
|
],
|
|
resolve: {
|
|
alias: {
|
|
'@renderer': resolve('src/renderer/src'),
|
|
'@shared': resolve('packages/shared'),
|
|
'@types': resolve('src/renderer/src/types'),
|
|
'@logger': resolve('src/renderer/src/services/LoggerService'),
|
|
'@data': resolve('src/renderer/src/data'),
|
|
'@mcp-trace/trace-core': resolve('packages/mcp-trace/trace-core'),
|
|
'@mcp-trace/trace-web': resolve('packages/mcp-trace/trace-web'),
|
|
'@cherrystudio/ai-core/provider': resolve('packages/aiCore/src/core/providers'),
|
|
'@cherrystudio/ai-core/built-in/plugins': resolve('packages/aiCore/src/core/plugins/built-in'),
|
|
'@cherrystudio/ai-core': resolve('packages/aiCore/src'),
|
|
'@cherrystudio/extension-table-plus': resolve('packages/extension-table-plus/src'),
|
|
'@cherrystudio/ai-sdk-provider': resolve('packages/ai-sdk-provider/src'),
|
|
'@cherrystudio/ui/icons': resolve('packages/ui/src/components/icons'),
|
|
'@cherrystudio/ui': resolve('packages/ui/src'),
|
|
'@test-mocks': resolve('tests/__mocks__')
|
|
}
|
|
},
|
|
optimizeDeps: {
|
|
exclude: ['pyodide'],
|
|
esbuildOptions: {
|
|
target: 'esnext' // for dev
|
|
}
|
|
},
|
|
worker: {
|
|
format: 'es'
|
|
},
|
|
build: {
|
|
target: 'esnext', // for build
|
|
rollupOptions: {
|
|
input: {
|
|
index: resolve(__dirname, 'src/renderer/index.html'),
|
|
miniWindow: resolve(__dirname, 'src/renderer/miniWindow.html'),
|
|
selectionToolbar: resolve(__dirname, 'src/renderer/selectionToolbar.html'),
|
|
selectionAction: resolve(__dirname, 'src/renderer/selectionAction.html'),
|
|
traceWindow: resolve(__dirname, 'src/renderer/traceWindow.html'),
|
|
migrationV2: resolve(__dirname, 'src/renderer/migrationV2.html')
|
|
},
|
|
onwarn(warning, warn) {
|
|
if (warning.code === 'COMMONJS_VARIABLE_IN_ESM') return
|
|
warn(warning)
|
|
}
|
|
}
|
|
},
|
|
esbuild: isProd ? { legalComments: 'none' } : {}
|
|
}
|
|
})
|