diff --git a/apps/client/src/layout/Layout.tsx b/apps/client/src/layout/Layout.tsx index a5d2d08a..66c3f31f 100644 --- a/apps/client/src/layout/Layout.tsx +++ b/apps/client/src/layout/Layout.tsx @@ -1,5 +1,6 @@ -import { Outlet,useLocation } from 'react-router-dom'; +import { Outlet, useLocation } from 'react-router-dom'; import { Sidebar } from '@shared/components/sidebar/Sidebar'; +import { Suspense } from 'react'; const Layout = () => { const location = useLocation(); @@ -8,9 +9,11 @@ const Layout = () => { return ( <>
- {!isOnboarding && } + {!isOnboarding && }
- + Loading...
}> + + diff --git a/apps/client/src/routes/router.tsx b/apps/client/src/routes/router.tsx index 3f8f59ed..f4285b88 100644 --- a/apps/client/src/routes/router.tsx +++ b/apps/client/src/routes/router.tsx @@ -1,11 +1,13 @@ -import Category from '@pages/category/Category'; -import Level from '@pages/level/Level'; -import MyBookmark from '@pages/myBookmark/MyBookmark'; -import OnBoarding from '@pages/onBoarding/OnBoarding'; import Remind from '@pages/remind/Remind'; import { ROUTES_CONFIG } from '@routes/routesConfig'; import { createBrowserRouter } from 'react-router-dom'; import Layout from 'src/layout/Layout'; +import { lazy } from 'react'; + +const MyBookmark = lazy(() => import('@pages/myBookmark/MyBookmark')); +const Category = lazy(() => import('@pages/category/Category')); +const Level = lazy(() => import('@pages/level/Level')); +const OnBoarding = lazy(() => import('@pages/onBoarding/OnBoarding')); export const router = createBrowserRouter([ { @@ -13,7 +15,7 @@ export const router = createBrowserRouter([ element: , children: [ { - path: ROUTES_CONFIG.remind.path, + index: true, element: , }, { diff --git a/apps/client/vite.config.ts b/apps/client/vite.config.ts index 56d6f57b..571b45fc 100644 --- a/apps/client/vite.config.ts +++ b/apps/client/vite.config.ts @@ -4,6 +4,7 @@ import { defineConfig } from 'vite'; import { resolve } from 'path'; import tsconfigPaths from 'vite-tsconfig-paths'; import svgSpritePlugin from '@pivanov/vite-plugin-svg-sprite'; +import { visualizer } from 'rollup-plugin-visualizer'; // https://vite.dev/config/ export default defineConfig({ @@ -17,12 +18,32 @@ export default defineConfig({ symbolId: 'icon-[name]', inject: 'body-last', }), + visualizer({ filename: 'dist/bundle-analysis.html', open: true }), ], + build: { + rollupOptions: { + output: { + manualChunks: (id: string) => { + if ( + id.includes('node_modules/react/') || + id.includes('node_modules/react-dom/') || + id.includes('node_modules/react-router-dom/') + ) { + return '@react-vendor'; + } + if (id.includes('node_modules/framer-motion/')) { + return '@framer-motion-vendor'; + } + }, + }, + }, + }, + resolve: { alias: { '@': resolve(__dirname, './src'), '@api': resolve(__dirname, './src/api'), - '@assets':resolve(__dirname,'./src/assets'), + '@assets': resolve(__dirname, './src/assets'), '@utils': resolve(__dirname, './src/utils'), '@constants': resolve(__dirname, './src/constants'), '@shared-types': resolve(__dirname, './src/types'), diff --git a/package.json b/package.json index 2db20911..f41f3cd9 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "playwright": "^1.55.0", "prettier": "^3.6.2", "prettier-plugin-tailwindcss": "^0.6.14", + "rollup-plugin-visualizer": "^6.0.5", "storybook": "^9.1.3", "turbo": "^2.5.6", "typescript": "5.9.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f10be98e..452add23 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,6 +69,9 @@ importers: prettier-plugin-tailwindcss: specifier: ^0.6.14 version: 0.6.14(@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.6.2))(prettier@3.6.2) + rollup-plugin-visualizer: + specifier: ^6.0.5 + version: 6.0.5(rollup@4.46.2) storybook: specifier: ^9.1.3 version: 9.1.3(@testing-library/dom@10.4.1)(prettier@3.6.2)(vite@7.1.2(@types/node@22.15.3)(jiti@2.5.1)(lightningcss@1.30.1)(tsx@4.20.4)(yaml@2.8.1)) @@ -4210,6 +4213,19 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rollup-plugin-visualizer@6.0.5: + resolution: {integrity: sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + rolldown: 1.x || ^1.0.0-beta + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rolldown: + optional: true + rollup: + optional: true + rollup@2.79.2: resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} engines: {node: '>=10.0.0'} @@ -4357,6 +4373,10 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + stable-hash-x@0.2.0: resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} engines: {node: '>=12.0.0'} @@ -9052,6 +9072,15 @@ snapshots: dependencies: glob: 7.2.3 + rollup-plugin-visualizer@6.0.5(rollup@4.46.2): + dependencies: + open: 8.4.2 + picomatch: 4.0.3 + source-map: 0.7.6 + yargs: 17.7.2 + optionalDependencies: + rollup: 4.46.2 + rollup@2.79.2: optionalDependencies: fsevents: 2.3.3 @@ -9231,6 +9260,8 @@ snapshots: source-map@0.6.1: {} + source-map@0.7.6: {} + stable-hash-x@0.2.0: {} stackback@0.0.2: {}