Svelte를 사용할 일이 생겨서 학습을 위해 Svelte 공식 사이트의 Tutorial을 진행하면서 학습한 내용을 정리한 시리즈 입니다.
이런 식으로 공식 사이트 옆에 학습하면서 실습해볼 수 있는 좋은 환경이 구성되어 있지만 내가 글을 쓰면서 한번 더 기억하기 위한 글입니다.
Svelte도 React, Vue처럼 자바스크립트 프레임워크지만 다른 프레임워크와 달리 런타임이 아닌 빌드타임에 변환되는데, 추상화하는 비용과 첫 로드시 패널티가 없습니다.
그리고 Svelte로만 독립된 패키지처럼 어디서든 실행가능합니다.
Svelte에서 하나의 App은 1개 이상의 컴포넌트로 구성되고 컴포넌트는 .svelte 파일에 있는 재사용 가능한 HTML/CSS/JS 코드 입니다.
<script>
let name = 'world'
</script>
<h1>Hello {name}<h1>
script
태그 안에 코드를 작성하여 변수를 선언할 수 있습니다.h1
태그 같은 html 태그 안에서 {name}
의 형태로 사용할 수 있습니다.{name.toUpperCase()}
처럼 string의 내장 함수를 사용할 수 있습니다.<script>
let src = ".../image.gif"
let name = "모히칸"
</script>
<img src={src} alt="{name} is dancing">
위처럼 img태그의 src속성에 src변수를 넣을 수 있습니다. 속성에 변수를 넣기 위해서 똑같이 {}안에 변수명을 넣어주면 됩니다.
"{name} is dancing"
처럼 문자열 안에도 변수를 넣을 수 있습니다.
위처럼 대입하려는 속성과 대입하려는 변수의 이름이 똑같을 경우 <img src>
처럼 축약할 수 있습니다.
img
태그를 사용하면 이미지 로드가 오래걸리는 사용자를 위해 개발자가 alt
속성을 작성할 수 있도록 경고문을 띄워줍니다.<p> Hi </p>
<style>
p {
...
}
</style>
style
태그 안에 css코드를 작성해서 스타일링이 가능합니다.다른 파일에서 컴포넌트를 import 해와서 사용할 수 있습니다.
각각의 .svelte 파일이 하나의 컴포넌트입니다.
// App.svelte
<script>
import Nested from './Nested.svelte';
</script>
<style>
p {
color: red;
}
</style>
<p>안녕하세요 App입니다.</p>
<Nested />
...
// Nested.svelte
<p>안녕하세요 Nested입니다.</p>
<Nested />
를 작성하면 Nested.svelte의 코드를 사용할 수 있습니다.style
태그의 범위는 해당 컴포넌트 안이기 때문에 같은 p
태그이지만 App의 p에는 style이 적용되고 Nested의 p에는 style이 적용되지 않습니다.기존 HTML태그와 구분하기 위해 사용자가 정의한 컴포넌트는 대문자로 시작해야 합니다.
배포할 수 있는 Vite를 위한 setup이 되어있는 도구입니다.
npm create svelte@latest myapp
위와 같은 명령어로 svelte 프로젝트를 생성할 수 있다.
┌ Welcome to SvelteKit!
│
◆ Which Svelte app template?
│ ● SvelteKit demo app (A demo app showcasing some of the features of SvelteKit - play a word
guessing game that works without JavaScript!)
│ ○ Skeleton project
│ ○ Library project
└
3가지 버전을 선택할 수 있는데,
1. Demo App: Counter와 간단한 게임까지 구현되어있는 Svelte Project를 생성한다.
2. Skeleton Project: 페이지 하나 있는 빈 Svelte Project를 생성한다.
3. Library Project: Svelte 라이브러리를 만들기 위한 빈 Velte Project를 생성한다.
프로젝트를 한 번 set up하면 각 컴포넌트를 JS Class처럼 new를 사용하여 인스턴스화할 수 있다고 하는데, 아직은 잘 모르겠다.