UNPKG

@choi2021/next-route-visualizer

Version:

πŸ—ΊοΈ Visualize Next.js routes as an interactive diagram with advanced function analysis. Supports dynamic route detection, function-based navigation patterns, and comprehensive Next.js route mapping. Generate JSON data and beautiful HTML reports to explore

213 lines (156 loc) β€’ 6.02 kB
# πŸ—ΊοΈ Next.js Route Visualizer **Next.js ν”„λ‘œμ νŠΈμ˜ 라우트 ꡬ쑰와 λ„€λΉ„κ²Œμ΄μ…˜μ„ ν•œ λˆˆμ— μ‹œκ°ν™”ν•΄λ³΄μ„Έμš”!** ν•œ 번의 λͺ…λ Ήμ–΄λ‘œ 라우트 κ·Έλž˜ν”„ JSONκ³Ό μΈν„°λž™ν‹°λΈŒ HTML 리포트λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. ## ✨ νŠΉμ§• - πŸš€ **원클릭 μ‹€ν–‰**: `npx` λͺ…λ Ήμ–΄ ν•˜λ‚˜λ‘œ μ¦‰μ‹œ μ‹œκ°ν™” - πŸ“Š **라우트 뢄석**: νŽ˜μ΄μ§€μ™€ 닀이내믹 라우트 관계 좔적 - 🎯 **동적 ν•¨μˆ˜ 뢄석**: `Router.push(getRoute())`와 같은 동적 ν•¨μˆ˜ 호좜 λ‚΄λΆ€ 뢄석 - πŸ” **κ³ κΈ‰ λ„€λΉ„κ²Œμ΄μ…˜ 감지**: Routes μƒμˆ˜, ν™”μ‚΄ν‘œ ν•¨μˆ˜, 쑰건뢀 λ„€λΉ„κ²Œμ΄μ…˜ 지원 - 🎨 **두 κ°€μ§€ μ‹œκ°ν™” λͺ¨λ“œ**: - πŸ“ˆ **κ·Έλž˜ν”„ λ‹€μ΄μ–΄κ·Έλž¨**: λ“œλž˜κ·Έ, 쀌, 필터링 κ°€λŠ₯ν•œ λ…Έλ“œ-링크 μ‹œκ°ν™” - πŸ“‹ **μΈν„°λž™ν‹°λΈŒ 리포트**: νŽ˜μ΄μ§€ μ„ νƒν˜• μ—°κ²° 탐색 μΈν„°νŽ˜μ΄μŠ€ - πŸ’Ύ **JSON 좜λ ₯**: λ‹€λ₯Έ λ„κ΅¬μ—μ„œλ„ ν™œμš© κ°€λŠ₯ν•œ 데이터 - 🌐 **μžλ™ λΈŒλΌμš°μ €**: 생성 μ¦‰μ‹œ λΈŒλΌμš°μ €μ—μ„œ μ—΄λ¦Ό ## πŸš€ λΉ λ₯Έ μ‹œμž‘ ### Next.js ν”„λ‘œμ νŠΈμ—μ„œ λ°”λ‘œ μ‹€ν–‰ ```bash # ν˜„μž¬ 디렉터리 뢄석 (κΈ°λ³Έ: κ·Έλž˜ν”„ λ‹€μ΄μ–΄κ·Έλž¨) npx @choi2021/next-route-visualizer # μΈν„°λž™ν‹°λΈŒ HTML 리포트 생성 npx @choi2021/next-route-visualizer report # νŠΉμ • ν”„λ‘œμ νŠΈ 뢄석 npx @choi2021/next-route-visualizer ./my-next-app npx @choi2021/next-route-visualizer report ./my-next-app ``` ### λͺ…λ Ήμ–΄ μ˜΅μ…˜ ```bash # κΈ°λ³Έ κ·Έλž˜ν”„ μ‹œκ°ν™” npx @choi2021/next-route-visualizer map [project-path] # μΈν„°λž™ν‹°λΈŒ HTML 리포트 npx @choi2021/next-route-visualizer report [project-path] [-o output.html] ``` ### κ²°κ³Ό **κ·Έλž˜ν”„ μ‹œκ°ν™” (`map` λͺ…λ Ήμ–΄):** - `route-graph.json` - 라우트 데이터 - `route-visualizer.html` - λ…Έλ“œ-링크 κ·Έλž˜ν”„ μ‹œκ°ν™” **HTML 리포트 (`report` λͺ…λ Ήμ–΄):** - `route-graph.json` - 라우트 데이터 - `route-report.html` - νŽ˜μ΄μ§€ μ„ νƒν˜• μΈν„°λž™ν‹°λΈŒ 리포트 ## πŸ“‹ μ‹œμŠ€ν…œ μš”κ΅¬μ‚¬ν•­ - Node.js 14.0.0 이상 - Next.js ν”„λ‘œμ νŠΈ (pages/ λ˜λŠ” src/pages/ ꡬ쑰) ## πŸ’‘ μ‚¬μš© μ˜ˆμ‹œ ```bash $ npx @choi2021/next-route-visualizer report πŸ“Š Next.js Route HTML Report Generator v1.0.0 πŸ”„ 라우트 뢄석 쀑... πŸ“Š HTML 리포트 생성 쀑... βœ… HTML λ¦¬ν¬νŠΈκ°€ μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€: route-report.html πŸ“Š 총 9개 νŽ˜μ΄μ§€, 139개 μ—°κ²° 뢄석 μ™„λ£Œ 🌐 λΈŒλΌμš°μ €μ—μ„œ 리포트λ₯Ό μ—΄μ—ˆμŠ΅λ‹ˆλ‹€! ``` ## 🎨 μ‹œκ°ν™” λͺ¨λ“œ ### 1. πŸ“ˆ κ·Έλž˜ν”„ λ‹€μ΄μ–΄κ·Έλž¨ (`map`) - **컬러 μ½”λ”©**: νŽ˜μ΄μ§€(νŒŒλž€μƒ‰), 닀이내믹 라우트(주황색) - **μΈν„°λž™ν‹°λΈŒ κ·Έλž˜ν”„**: λ…Έλ“œ λ“œλž˜κ·Έ, 쀌 인/아웃, 팬 - **μ„ΈλΆ€ 정보**: ν˜Έλ²„μ‹œ 파일 경둜, μ½”λ“œ μŠ€λ‹ˆνŽ«, 라인 번호 ν‘œμ‹œ - **μ—°κ²° 좔적**: νŽ˜μ΄μ§€κ°„ λ„€λΉ„κ²Œμ΄μ…˜ 관계 μ‹œκ°ν™” ### 2. πŸ“‹ μΈν„°λž™ν‹°λΈŒ 리포트 (`report`) - **μ‚¬μ΄λ“œλ°”**: μ—°κ²° 수 κΈ°μ€€ μ •λ ¬λœ νŽ˜μ΄μ§€ λͺ©λ‘ - **νŽ˜μ΄μ§€ 상세**: μ„ νƒλœ νŽ˜μ΄μ§€μ˜ incoming/outgoing μ—°κ²° ν‘œμ‹œ - **ν”„λ‘œμ νŠΈ 톡계**: 전체 νŽ˜μ΄μ§€, μ—°κ²° 수, 평균 μ—°κ²° 수 - **검색 κΈ°λŠ₯**: νŽ˜μ΄μ§€ 경둜 μ‹€μ‹œκ°„ 검색 - **클릭 λ„€λΉ„κ²Œμ΄μ…˜**: μ—°κ²°λœ νŽ˜μ΄μ§€ κ°„ μ‰¬μš΄ 이동 ## πŸ“Š 좜λ ₯ 데이터 ꡬ쑰 `route-graph.json`의 ꡬ쑰: ```json { "nodes": [ { "id": "/", "path": "/", "type": "page", "filePath": "pages/index.tsx", "fileSize": 2203, "metadata": { "depth": 0, "segments": [""] } } ], "edges": [ { "source": "/", "target": "/about", "method": "link", "lineNumber": 25, "codeSnippet": "<Link href='/about'>", "fileName": "pages/index.tsx" } ], "summary": { "totalPages": 9, "totalConnections": 139, "avgConnections": 15.4 } } ``` ## πŸ” μ—°κ²° 뢄석 νƒ€μž… - **link**: Next.js Link μ»΄ν¬λ„ŒνŠΈ - **router**: router.push(), router.replace() λ“± - **component**: μ»΄ν¬λ„ŒνŠΈλ₯Ό ν†΅ν•œ κ°„μ ‘ λ„€λΉ„κ²Œμ΄μ…˜ ## πŸ› οΈ 개발 및 디버깅 ### 둜컬 개발 ```bash git clone https://github.com/your-username/next-route-map.git cd next-route-map npm install npm run build # 예제 ν”„λ‘œμ νŠΈ ν…ŒμŠ€νŠΈ npm run test:example # HTML 리포트 ν…ŒμŠ€νŠΈ npm run test:report ``` ## 🀝 κΈ°μ—¬ν•˜κΈ° 버그 λ¦¬ν¬νŠΈμ™€ κΈ°λŠ₯ μ œμ•ˆμ€ [GitHub Issues](https://github.com/your-username/next-route-map/issues)μ—μ„œ ν™˜μ˜ν•©λ‹ˆλ‹€. ## πŸ“„ λΌμ΄μ„ μŠ€ MIT License --- **⭐ ν”„λ‘œμ νŠΈκ°€ μœ μš©ν•˜λ‹€λ©΄ GitHubμ—μ„œ λ³„ν‘œλ₯Ό λˆŒλŸ¬μ£Όμ„Έμš”!** ## 🎯 κ³ κΈ‰ 뢄석 κΈ°λŠ₯ (v1.1.0) ### 동적 ν•¨μˆ˜ 뢄석 이제 λ‹€μŒκ³Ό 같은 λ³΅μž‘ν•œ λ„€λΉ„κ²Œμ΄μ…˜ νŒ¨ν„΄λ„ μ •ν™•νžˆ λΆ„μ„ν•©λ‹ˆλ‹€: ```typescript // 1. 쑰건뢀 동적 ν•¨μˆ˜ (βœ… λͺ¨λ“  κ°€λŠ₯ν•œ 경둜 감지) const getRoute = () => { if (condition) { return V2_Routes.ADMIN_PANEL(); // β†’ /v2/admin/panel } else { return Routes.PROFILE(); // β†’ /profile } }; const handleClick = () => { Router.push(getRoute()); // 두 경둜 λͺ¨λ‘ μ‹œκ°ν™”λ¨! }; // 2. ν™”μ‚΄ν‘œ ν•¨μˆ˜ Routes μƒμˆ˜ (βœ… 지원) export const V2_Routes = { ADMIN_PANEL: () => "/v2/admin/panel", USER_PROFILE: (id) => `/v2/user/${id}`, }; // 3. getServerSideProps λ¦¬λ””λ ‰μ…˜ (βœ… 지원) export async function getServerSideProps() { if (!authenticated) { return { redirect: { destination: "/login" } }; } } // 4. λŒ€μ†Œλ¬Έμž ꡬ뢄 (βœ… λͺ¨λ‘ 감지) Router.push(Routes.HOME()); // λŒ€λ¬Έμž Router router.push(Routes.PROFILE()); // μ†Œλ¬Έμž router ``` ### μ§€μ›ν•˜λŠ” λ„€λΉ„κ²Œμ΄μ…˜ νŒ¨ν„΄ - βœ… **정적 경둜**: `"/dashboard"`, `'/profile'` - βœ… **Routes μƒμˆ˜**: `Routes.HOME`, `ROUTES.DASHBOARD` - βœ… **ν•¨μˆ˜ν˜• Routes**: `Routes.PROFILE()`, `V2_Routes.ADMIN()` - βœ… **동적 ν•¨μˆ˜ 호좜**: `Router.push(getRoute())` - βœ… **쑰건뢀 리턴**: `if/else` 블둝 λ‚΄ λ„€λΉ„κ²Œμ΄μ…˜ - βœ… **ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄**: `` `/dashboard?tab=${tab}` `` - βœ… **getServerSideProps λ¦¬λ””λ ‰μ…˜** - βœ… **useEffect λ‚΄ λ„€λΉ„κ²Œμ΄μ…˜** - βœ… **ν›… 기반 λ„€λΉ„κ²Œμ΄μ…˜**