Files
Gnuboard7/vite.config.core.js
T
2026-04-01 10:30:52 +09:00

69 lines
2.2 KiB
JavaScript

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';
import { copyFileSync, mkdirSync, readdirSync } from 'fs';
// 다국어 파일 복사 플러그인
function copyLangFiles() {
return {
name: 'copy-lang-files',
closeBundle() {
const srcLangDir = path.resolve(__dirname, 'resources/js/core/lang');
const destLangDir = path.resolve(__dirname, 'public/build/core/lang');
mkdirSync(destLangDir, { recursive: true });
// lang 디렉토리의 모든 .json 파일 복사
const files = readdirSync(srcLangDir).filter(file => file.endsWith('.json'));
files.forEach(file => {
const src = path.join(srcLangDir, file);
const dest = path.join(destLangDir, file);
copyFileSync(src, dest);
console.log(`✓ Copied ${file} to public/build/core/lang/`);
});
}
};
}
export default defineConfig({
plugins: [react(), copyLangFiles()],
publicDir: false,
// 환경 변수 정의 (React 빌드용)
define: {
'process.env.NODE_ENV': JSON.stringify('production'),
},
build: {
outDir: 'public/build/core',
emptyOutDir: false,
lib: {
entry: path.resolve(__dirname, 'resources/js/core/template-engine.ts'),
name: 'G7Core',
formats: ['iife'],
fileName: () => 'template-engine.min.js',
},
rollupOptions: {
// React/ReactDOM을 external에서 제거하여 번들에 포함
// external: ['react', 'react-dom'],
output: {
// React/ReactDOM이 번들에 포함되므로 globals 불필요
// globals: {
// react: 'React',
// 'react-dom': 'ReactDOM',
// },
exports: 'named',
// IIFE 번들에서 전역 변수 자동 할당
extend: true,
},
},
minify: 'esbuild',
sourcemap: true,
target: 'es2020',
},
resolve: {
alias: {
'@': path.resolve(__dirname, 'resources/js'),
},
},
});