콘텐츠로 이동

Usage with SvelteKit

SvelteKit 프로젝트에 FSD(Feature-Sliced Design)를 적용할 때는 다음 차이를 유의하세요:

  • SvelteKit은 routing 파일을 src/routes에 두지만, FSD는 routing을 app 레이어에 포함합니다.
  • SvelteKit은 라우트 외 파일을 src/lib에 두도록 권장합니다.

svelte.config.ts에서 기본 경로를 변경해 app layer로 라우팅과 템플릿을 이동하고, src/lib를 설정합니다.

svelte.config.ts
import adapter from '@sveltejs/adapter-auto';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
/** @type {import('@sveltejs/kit').Config}*/
const config = {
preprocess: [vitePreprocess()],
kit: {
adapter: adapter(),
files: {
routes: 'src/app/routes', // routing을 app layer로 이동
lib: 'src',
appTemplate: 'src/app/index.html', // application entry point를 app layer로 이동
assets: 'public'
},
alias: {
'@/*': 'src/*' // src directory alias 설정
}
}
};
export default config;

설정 변경 후 폴더 구조는 다음과 같습니다:

  • 디렉터리src
    • 디렉터리app
      • index.html
      • routes
    • pages FSD Pages folder

이제 app/routes 폴더에 라우트 파일을 두고, pages layer의 컴포넌트를 연결할 수 있습니다.

예시) Home 페이지 추가 예시

  1. pages layer에 새 page slice 생성
  2. app/routes에 route 파일 추가
  3. page component를 route와 연결

CLI 도구로 page slice를 생성합니다:

Terminal window
fsd pages home

pages/home/ui/home-page.svelte를 생성하고 public API로 노출하세요:

src/pages/home/index.ts
export { default as HomePage } from './ui/home-page';

app/routes에 route 파일을 추가합니다:

  • 디렉터리src
    • 디렉터리app
      • 디렉터리routes
        • +page.svelte
      • index.html
    • 디렉터리pages
      • 디렉터리home
        • 디렉터리ui
          • home-page.svelte
        • index.ts

+page.svelte에서 page component를 import 후 렌더링합니다:

src/app/routes/+page.svelte
<script>
import { HomePage } from '@/pages/home';
</script>
<HomePage/>