- 스벨트는 빌드시, 모든 코드를 효율적인 javascript 로 변환
- 가상돔과 npm 의존성(코어 라이브러리)을 없애고 런타임(실행환경)에 코드를 해석하지 않는다.
컴파일러는 번역기다. 스벨트는 이런 컴파일 역할을 하여 효율적인 javascript 코드로 변환
가상돔을 사용하지 않는다. + react, vue 처럼 npm 의존성(vue, react, react-dom)이 존재하지 않는다.
"dependencies": {
    "sirv-cli": "^0.4.4"
},
  "devDependencies": {
    "@rollup/plugin-commonjs": "^11.0.0",
    "@rollup/plugin-node-resolve": "^7.0.0",
    "rollup": "^1.20.0",
    "rollup-plugin-livereload": "^1.0.0",
    "rollup-plugin-svelte": "^5.0.3",
    "rollup-plugin-terser": "^5.1.2",
    "svelte": "^3.0.0"
}
svelte는 기본적으로 컴파일러이기 때문에, 런타임에 svelte 관련 라이브러리를 불러오거나 의존성이 존재하지 않음.
-> Virtual(가상) DOM이 없고, Runtime(런타임)에 로드할 프레임워크 또는 라이브러리가 없음을 의미
npx degit sveltejs/template my-svelte-project
cd my-svelte-project
npm i
npm run dev
src/example, public/build 폴더를 제외하면 초기 구성은 위 사진과 같다
// rollup.config.js input 에 시작점
import App from './App.svelte';
const app = new App({
	target: document.querySelector('#app'),
	props: {
		name: 'world'
	}
});
export default app;
// component format
<script>
	// logic goes here
</script>
<style>
	/* styles go here */
</style>
<!-- markup (zero or more items) goes here -->
<script>
    let count = 0;
    let count2 = 100;
    const addCount = () => {
        count2++
    }
</script>
<button on:click={() => count += 1}>
    {count}
</button>
<button on:click={addCount}>
    {count2}
</button>
<style>
    button {
        background-color: #4287f5; /* Green */
        border: none;
        outline: none;
        color: white;
        padding: 8px;
        text-align: center;
        text-decoration: none;
        font-size: 14px;
        display: inline-block;
    }
</style>
// props 관련
// PropsExample.svelte
<script>
    export let name = null;
    export let age = null;
    export const readOnly = 'readOnly!!'; // const 로 선언하면 무조건 읽기 전용
</script>
<div>
    <p>난 부모에게 값을 받았어요!</p>
    <p>
        name : {name} / age : {age}
    </p>
    <p>
        readOnly : {readOnly}
    </p>
    <div>
        <button on:click={() => name = '변경이름'}>변경</button>
    </div>
</div>
let person = {
		name : 'nameProp',
		age : 100
	}
<PropsExample name="{person.name}" age="{person.age}" readOnly="zzzz"/>