2026-02-05 06:35:50 +09:00
|
|
|
import { Routes, Route } from 'react-router-dom';
|
|
|
|
|
import { lazy, Suspense } from 'react';
|
2026-01-30 13:01:54 +09:00
|
|
|
|
|
|
|
|
// 구현 영역 - 레이아웃
|
|
|
|
|
import MainLayout from './components/layout/MainLayout';
|
2026-02-05 06:35:50 +09:00
|
|
|
import { ToastContainer } from './components/common/Toast';
|
2026-01-30 13:01:54 +09:00
|
|
|
|
2026-02-05 06:35:50 +09:00
|
|
|
// 퍼블리시 영역 (개발 환경에서만 동적 로드)
|
|
|
|
|
// 프로덕션 빌드 시 tree-shaking으로 제외됨
|
|
|
|
|
const PublishRouter = import.meta.env.DEV
|
2026-02-09 14:29:01 +09:00
|
|
|
? lazy(() =>
|
|
|
|
|
import('./publish').catch(() => ({
|
|
|
|
|
default: () => (
|
|
|
|
|
<div style={{ color: '#fff', padding: '2rem' }}>
|
|
|
|
|
publish 폴더가 없습니다. 퍼블리시 파일을 추가하면 자동으로 활성화됩니다.
|
|
|
|
|
</div>
|
|
|
|
|
),
|
|
|
|
|
}))
|
|
|
|
|
)
|
2026-02-05 06:35:50 +09:00
|
|
|
: null;
|
2026-01-30 13:01:54 +09:00
|
|
|
|
|
|
|
|
export default function App() {
|
|
|
|
|
return (
|
2026-02-05 06:35:50 +09:00
|
|
|
<>
|
|
|
|
|
<ToastContainer />
|
2026-01-30 13:01:54 +09:00
|
|
|
<Routes>
|
|
|
|
|
{/* =====================
|
|
|
|
|
구현 영역 (메인)
|
|
|
|
|
- 모든 메뉴 경로를 MainLayout으로 처리
|
|
|
|
|
===================== */}
|
|
|
|
|
<Route path="/*" element={<MainLayout />} />
|
|
|
|
|
|
|
|
|
|
{/* =====================
|
2026-02-05 06:35:50 +09:00
|
|
|
퍼블리시 영역 (개발 환경 전용)
|
2026-01-30 13:01:54 +09:00
|
|
|
/publish/* 로 접근하여 퍼블리시 결과물 미리보기
|
2026-02-05 06:35:50 +09:00
|
|
|
프로덕션 빌드 시 이 라우트와 관련 모듈이 제외됨
|
2026-01-30 13:01:54 +09:00
|
|
|
===================== */}
|
2026-02-05 06:35:50 +09:00
|
|
|
{import.meta.env.DEV && PublishRouter && (
|
|
|
|
|
<Route
|
|
|
|
|
path="/publish/*"
|
|
|
|
|
element={
|
|
|
|
|
<Suspense fallback={<div style={{ color: '#fff', padding: '2rem' }}>Loading publish...</div>}>
|
|
|
|
|
<PublishRouter />
|
|
|
|
|
</Suspense>
|
|
|
|
|
}
|
|
|
|
|
/>
|
|
|
|
|
)}
|
2026-01-30 13:01:54 +09:00
|
|
|
</Routes>
|
2026-02-05 06:35:50 +09:00
|
|
|
</>
|
2026-01-30 13:01:54 +09:00
|
|
|
);
|
|
|
|
|
}
|