d3ro-voice/apps/desktop/electron.vite.config.ts
yunchan8804 a041f1b6a9 feat(V2-1c): packages/ui 추출 — DS 컴포넌트 + theme + theme-vars 분리
packages/ui (@d3ro/ui) 신규:
- src/theme.ts (d3roPalette/d3roTypo/d3roShadow/d3roRadius SSOT)
- src/theme-vars.ts (팝업/main 프로세스용 CSS 변수 맵)
- src/components/ds/ (CrtDisplay, InstrumentPanel, Led, MetalCard,
  MetalDial, PhosphorText, PhysicalButton, ScreenPanel, ButtonGroup)
- src/index.ts barrel
- subpath exports: ./theme, ./theme-vars, ./components/ds
- React/MUI/Emotion은 peerDependencies로 선언
- @d3ro/core만 직접 의존성

apps/desktop/src/shared/ 디렉토리 완전 제거:
- theme-vars가 마지막 남은 파일이었음
- tsconfig include에서 src/shared/**/* 제거

일괄 치환 (renderer 전역):
- ../theme, ../../theme, ./theme → @d3ro/ui/theme
- ../components/ds, ../../components/ds, ./ds, ../ds → @d3ro/ui/components/ds
- ../ds/<Component>, ../../ds/<Component> → @d3ro/ui/components/ds
  (세부 파일 import는 barrel로 통합)
- @shared/theme-vars → @d3ro/ui/theme-vars (WindowManager)

apps/desktop 설정:
- package.json: @d3ro/ui: '*' dep 추가
- tsconfig.node/web.json: @shared/* paths 완전 제거, @d3ro/ui,
  @d3ro/ui/* paths 추가
- electron.vite.config.ts: @shared alias 제거, @d3ro/ui alias 추가,
  externalize exclude에 @d3ro/ui 추가
- vitest.config.ts: alias 교체

DS 컴포넌트 내부의 '../../theme' 상대 경로는 packages/ui 구조에서
동일하게 해결되어 그대로 유효.

검증: typecheck + build + dev 런타임 모두 통과.
2026-04-08 14:50:33 +09:00

64 lines
1.7 KiB
TypeScript

import { resolve } from 'path'
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
import react from '@vitejs/plugin-react'
const sharedAlias = {
'@d3ro/core': resolve(__dirname, '../../packages/core/src'),
'@d3ro/ui': resolve(__dirname, '../../packages/ui/src')
}
const workspaceExclude = ['@d3ro/core', '@d3ro/ui']
export default defineConfig({
main: {
plugins: [
externalizeDepsPlugin({
exclude: ['nanoid', 'electron-store', ...workspaceExclude]
})
],
resolve: { alias: sharedAlias }
},
preload: {
plugins: [externalizeDepsPlugin({ exclude: workspaceExclude })],
build: {
rollupOptions: {
input: {
index: resolve(__dirname, 'src/preload/index.ts'),
popup: resolve(__dirname, 'src/preload/popup.ts')
}
}
},
resolve: { alias: sharedAlias }
},
renderer: {
build: {
rollupOptions: {
input: {
index: resolve(__dirname, 'src/renderer/index.html'),
'popups/recording-tip': resolve(
__dirname,
'src/renderer/popups/recording-tip/index.html'
),
'popups/result-popup': resolve(
__dirname,
'src/renderer/popups/result-popup/index.html'
),
'popups/history-popup': resolve(
__dirname,
'src/renderer/popups/history-popup/index.html'
),
'popups/command-popup': resolve(
__dirname,
'src/renderer/popups/command-popup/index.html'
),
'popups/caption-overlay': resolve(
__dirname,
'src/renderer/popups/caption-overlay/index.html'
)
}
}
},
resolve: { alias: sharedAlias },
plugins: [react()]
}
})