file-organization
45
总安装量
46
周安装量
#4719
全站排名
安装命令
npx skills add https://github.com/supercent-io/skills-template --skill file-organization
Agent 安装分布
opencode
39
claude-code
36
gemini-cli
34
github-copilot
28
antigravity
25
Skill 文档
Project File Organization
When to use this skill
- ì ê· íë¡ì í¸: ì´ê¸° í´ë 구조 ì¤ê³
- íë¡ì í¸ ì±ì¥: ë³µì¡ë ì¦ê° ì 리í©í ë§
- í íì¤í: ì¼ê´ë 구조 í립
Instructions
Step 1: React/Next.js íë¡ì í¸ êµ¬ì¡°
src/
âââ app/ # Next.js 13+ App Router
â âââ (auth)/ # Route groups
â â âââ login/
â â âââ signup/
â âââ (dashboard)/
â â âââ layout.tsx
â â âââ page.tsx
â â âââ settings/
â âââ api/ # API routes
â â âââ auth/
â â âââ users/
â âââ layout.tsx
â
âââ components/ # UI Components
â âââ ui/ # Reusable UI (Button, Input)
â â âââ Button/
â â â âââ Button.tsx
â â â âââ Button.test.tsx
â â â âââ index.ts
â â âââ Input/
â âââ layout/ # Layout components (Header, Footer)
â âââ features/ # Feature-specific components
â â âââ auth/
â â âââ dashboard/
â âââ shared/ # Shared across features
â
âââ lib/ # Utilities & helpers
â âââ utils.ts
â âââ hooks/
â â âââ useAuth.ts
â â âââ useLocalStorage.ts
â âââ api/
â âââ client.ts
â
âââ store/ # State management
â âââ slices/
â â âââ authSlice.ts
â â âââ userSlice.ts
â âââ index.ts
â
âââ types/ # TypeScript types
â âââ api.ts
â âââ models.ts
â âââ index.ts
â
âââ config/ # Configuration
â âââ env.ts
â âââ constants.ts
â
âââ styles/ # Global styles
âââ globals.css
âââ theme.ts
Step 2: Node.js/Express ë°±ìë 구조
src/
âââ api/ # API layer
â âââ routes/
â â âââ auth.routes.ts
â â âââ user.routes.ts
â â âââ index.ts
â âââ controllers/
â â âââ auth.controller.ts
â â âââ user.controller.ts
â âââ middlewares/
â âââ auth.middleware.ts
â âââ errorHandler.ts
â âââ validation.ts
â
âââ services/ # Business logic
â âââ auth.service.ts
â âââ user.service.ts
â âââ email.service.ts
â
âââ repositories/ # Data access layer
â âââ user.repository.ts
â âââ session.repository.ts
â
âââ models/ # Database models
â âââ User.ts
â âââ Session.ts
â
âââ database/ # Database setup
â âââ connection.ts
â âââ migrations/
â âââ seeds/
â
âââ utils/ # Utilities
â âââ logger.ts
â âââ crypto.ts
â âââ validators.ts
â
âââ config/ # Configuration
â âââ index.ts
â âââ database.ts
â âââ env.ts
â
âââ types/ # TypeScript types
â âââ express.d.ts
â âââ models.ts
â
âââ __tests__/ # Tests
â âââ unit/
â âââ integration/
â âââ e2e/
â
âââ index.ts # Entry point
Step 3: Feature-Based 구조 (ëê·ëª¨ ì±)
src/
âââ features/
â âââ auth/
â â âââ components/
â â â âââ LoginForm.tsx
â â â âââ SignupForm.tsx
â â âââ hooks/
â â â âââ useAuth.ts
â â âââ api/
â â â âââ authApi.ts
â â âââ store/
â â â âââ authSlice.ts
â â âââ types/
â â â âââ auth.types.ts
â â âââ index.ts
â â
â âââ products/
â â âââ components/
â â âââ hooks/
â â âââ api/
â â âââ types/
â â
â âââ orders/
â
âââ shared/ # Shared across features
â âââ components/
â âââ hooks/
â âââ utils/
â âââ types/
â
âââ core/ # App-wide
âââ store/
âââ router/
âââ config/
Step 4: ëª ëª ê·ì¹ (Naming Conventions)
íì¼ëª :
Components: PascalCase.tsx
Hooks: camelCase.ts (useAuth.ts)
Utils: camelCase.ts (formatDate.ts)
Constants: UPPER_SNAKE_CASE.ts (API_ENDPOINTS.ts)
Types: camelCase.types.ts (user.types.ts)
Tests: *.test.ts, *.spec.ts
í´ëëª :
kebab-case: user-profile/
camelCase: userProfile/ (ì í: hooks/, utils/)
PascalCase: UserProfile/ (ì í: components/)
â
ì¼ê´ì±ì´ ì¤ì (í ì ì²´ê° ê°ì ê·ì¹ ì¬ì©)
ë³ì/í¨ìëª :
// Components: PascalCase
const UserProfile = () => {};
// Functions: camelCase
function getUserById() {}
// Constants: UPPER_SNAKE_CASE
const API_BASE_URL = 'https://api.example.com';
// Private: _prefix (ì í)
class User {
private _id: string;
private _hashPassword() {}
}
// Booleans: is/has/can prefix
const isAuthenticated = true;
const hasPermission = false;
const canEdit = true;
Step 5: index.ts ë°°ë´ íì¼
components/ui/index.ts:
// â
ì¢ì ì: Named exports ì¬export
export { Button } from './Button/Button';
export { Input } from './Input/Input';
export { Modal } from './Modal/Modal';
// ì¬ì©:
import { Button, Input } from '@/components/ui';
â ëì ì:
// 모ë ê²ì ì¬export (tree-shaking ì í´)
export * from './Button';
export * from './Input';
Output format
íë¡ì í¸ í í릿
my-app/
âââ .github/
â âââ workflows/
âââ public/
âââ src/
â âââ app/
â âââ components/
â âââ lib/
â âââ types/
â âââ config/
âââ tests/
âââ docs/
âââ scripts/
âââ .env.example
âââ .gitignore
âââ .eslintrc.json
âââ .prettierrc
âââ tsconfig.json
âââ package.json
âââ README.md
Constraints
íì ê·ì¹ (MUST)
- ì¼ê´ì±: í ì ì²´ê° ê°ì ê·ì¹ ì¬ì©
- ëª íí í´ëëª : ìí ì´ ëª íí´ì¼ í¨
- ìµë ê¹ì´: 5ë¨ê³ ì´í ê¶ì¥
ê¸ì§ ì¬í (MUST NOT)
- ê³¼ëí ì¤ì²©: í´ë ê¹ì´ 7ë¨ê³ ì´ì ì§ì
- 모í¸í ì´ë¦: utils2/, helpers/, misc/ ì§ì
- ìí ìì¡´ì±: A â B â A 참조 ê¸ì§
Best practices
- Colocation: ê´ë ¨ íì¼ì ê°ê¹ì´ (ì»´í¬ëí¸ + ì¤íì¼ + í ì¤í¸)
- Feature-Based: 기ë¥ë³ë¡ 모ëí
- Path Aliases:
@/ì¬ì©ì¼ë¡ import ê°ìí
tsconfig.json:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@/components/*": ["./src/components/*"],
"@/lib/*": ["./src/lib/*"]
}
}
}
ì¬ì©:
// â ëì ì
import { Button } from '../../../components/ui/Button';
// â
ì¢ì ì
import { Button } from '@/components/ui';
References
Metadata
ë²ì
- íì¬ ë²ì : 1.0.0
- ìµì¢ ì ë°ì´í¸: 2025-01-01
- í¸í íë«í¼: Claude, ChatGPT, Gemini
íê·¸
#file-organization #project-structure #folder-structure #naming-conventions #utilities