Vite(๋น ๋ฅด๋ค): ๋ชจ๋ ์น ํ๋ก์ ํธ์ ๋ฏธ๋
Vite(๋น ๋ฅด๋ค)๋ ํ๋์ค์ด๋ก "๋น ๋ฅด๋ค(Quick)"๋ฅผ ์๋ฏธํ๋ฉฐ, ๋ฐ์์ "veet"์ ๋น์ทํ /vit/์ ๋๋ค. ์ด ๋๊ตฌ๋ ๋น ๋ฅด๊ณ ๊ฐ๊ฒฐํ ๋ชจ๋ ์น ํ๋ก์ ํธ ๊ฐ๋ฐ ๊ฒฝํ์ ์ด์ ์ ๋ง์ถ ๋น๋ ๋๊ตฌ๋ก, ๋ค์ดํฐ๋ธ ES Module์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ๊ฐ๋ฐ ์์ ํ์ํ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋๋ Vite์ ์ฃผ์ ํน์ง๊ณผ ์ด์ ์ ๋ํ ๋ณด๋ค ์์ธํ ์ค๋ช ๊ณผ ์์ ์ฝ๋์ ๋๋ค.
1. ํต์ฌ ์ฝ์ ํธ
Vite๋ ๋ค์ ๋ ๊ฐ์ง ์ฝ์ ํธ๋ฅผ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ๋์์ต๋๋ค.
1.1 ๋ค์ดํฐ๋ธ ES Module ์ง์
Vite๋ ๋ค์ดํฐ๋ธ ES Module์ ๋์ด ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ํนํ, Hot Module Replacement (HMR)๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ค์๊ฐ์ผ๋ก ๊ฐ๋ฐ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค. ์ด๋ก์จ ๋น ๋ฅธ ๊ฐ๋ฐ๊ณผ ํจ์จ์ ์ธ ํผ๋๋ฐฑ ๋ฃจํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์์ ์ฝ๋: HMR ํ์ฉ
// main.js
import { createApp } from 'vue';
import App from './App.vue';
const app = createApp(App);
if (import.meta.env.DEV) {
// ๊ฐ๋ฐ ํ๊ฒฝ์์๋ง HMR์ ํ์ฑํ
import.meta.hot.accept();
import.meta.hot.dispose(() => {
// ๋ชจ๋์ด ๊ต์ฒด๋๊ธฐ ์ ์ ์คํํ ๋ก์ง
});
}
app.mount('#app');
1.2 ๋ค์ํ ๋น๋ ์ปค๋งจ๋ ์ง์
Vite๋ Rollup ๊ธฐ๋ฐ์ ๋ค์ํ ๋น๋ ์ปค๋งจ๋๋ฅผ ์ง์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ต์ ํ๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ๋ฐฐํฌํ ์ ์์ผ๋ฉฐ, ์ฌ์ ์ ์ค์ ๋ ์ค์ ์ ํตํด ๊ฐํธํ๊ฒ ํ๋ก์ ํธ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
์์ ์ฝ๋: ๋น๋ ์ปค๋งจ๋ ํ์ฉ
// vite.config.js
import { defineConfig } from 'vite';
export default defineConfig({
build: {
// ์ฌ๋ฌ ์ค์ ์ต์
๋ค...
},
});
2. Vite์ ํด๊ฒฐ์ฑ
Vite๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์กด์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ณ ์ ํฉ๋๋ค.
2.1 ๋ธ๋ผ์ฐ์ ์์ ESM์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฌธ์
์ด์ ์๋ ๋ธ๋ผ์ฐ์ ์์ ESM(ES Modules)์ ์ง์ํ๊ธฐ ์ ๊น์ง JavaScript ๋ชจ๋ํ๋ฅผ ๋ค์ดํฐ๋ธ ๋ ๋ฒจ์์ ์ํํ ์ ์์์ต๋๋ค. Vite๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ๋ ES Modules ๋ฐ ๋ค์ดํฐ๋ธ ์ธ์ด๋ก ์์ฑ๋ JavaScript ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํฉ๋๋ค.
์์ ์ฝ๋: ๋ค์ดํฐ๋ธ ES Module ํ์ฉ
// import.js
export const message = 'Hello from native ES Module!';
2.2 ๋๋ฆฐ ๊ฐ๋ฐ ์๋ฒ ๊ตฌ๋
Vite๋ ์๋ฒ๋ฅผ ์ฝ๋-์คํํธ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐํ๋ฉฐ, Dependencies์ Source Code๋ฅผ ๋๋์ด ๊ฐ๋ฐ ์๋ฒ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ตฌ๋ํฉ๋๋ค. Dependencies๋ Esbuild๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ๋ฒ๋ค๋ง๋๊ณ , Source Code๋ Native ESM์ ํ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์์ฒญํ ์ ์๋๋ก ํฉ๋๋ค.
์์ ์ฝ๋: ๋น ๋ฅธ ๊ฐ๋ฐ ์๋ฒ ๊ตฌ๋
# Vite ๊ฐ๋ฐ ์๋ฒ ์คํ
vite
2.3 ๋๋ฆฐ ์์ค ์ฝ๋ ๊ฐฑ์
Vite๋ HMR์ ์ง์ํ์ฌ ์์ค ์ฝ๋ ๊ฐฑ์ ์ ๋ฒ๋ค๋ง ๊ณผ์ ์ ์ต์ํํฉ๋๋ค. ์์ ๋ ๋ชจ๋๊ณผ ๊ด๋ จ๋ ๋ถ๋ถ๋ง ๊ต์ฒดํ๋ฏ๋ก ๊ฐฑ์ ์๊ฐ์ด ์ ํ์ ์ผ๋ก ์ฆ๊ฐํ์ง ์์ต๋๋ค. ๋ํ, HTTP ํค๋๋ฅผ ์ต์ ํํ์ฌ ํผํฌ๋จผ์ค๋ฅผ ํฅ์์ํต๋๋ค.
์์ ์ฝ๋: HMR์ ํตํ ๋น ๋ฅธ ์์ค ์ฝ๋ ๊ฐฑ์
// main.js
import { createApp } from 'vue';
import App from './App.vue';
const app = createApp(App);
if (import.meta.env.DEV) {
// ๊ฐ๋ฐ ํ๊ฒฝ์์๋ง HMR์ ํ์ฑํ
import.meta.hot.accept();
}
app.mount('#app');
3. ๋ฐฐํฌ์ ๋ฒ๋ค๋ง
Vite๋ ํ๋ก๋์ ์์ ๋ฒ๋ค๋ง์ด ํ์ํ ์ด์ ์ ๋ํด ๊ณ ๋ คํฉ๋๋ค. ์ต์ ์ ๋ก๋ฉ ์ฑ๋ฅ์ ์ป๊ธฐ ์ํด ํธ๋ฆฌ ์ ฐ์ดํน, ์ง์ฐ ๋ก๋ฉ, ์ฒญํฌ ํ์ผ ๋ถํ ๋ฑ์ ์ด์ฉํ์ฌ ํ๋ก๋์ ๋น๋๋ฅผ ์ต์ ํํฉ๋๋ค.
์์ ์ฝ๋: ํ๋ก๋์ ๋น๋ ์ค์
// vite.config.js
import { defineConfig } from 'vite';
export default defineConfig({
build: {
// ํ๋ก๋์
๋น๋ ์ค์ ์ต์
๋ค...
},
});
4. Esbuild ์ฌ์ฉ์ ๋ํ ์ ํ
Vite๋ ๋น๋ ์์ Esbuild๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ก, Esbuild๊ฐ ์์ง ์ฝ๋ ๋ถํ ๋ฐ CSS ์ฒ๋ฆฌ์ ๋ฏธ๋นํ๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์ ๋๋ค. Vite๋ ํ์ฌ๋ก์ Rollup์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, ํฅํ Esbuild์ ์์ ํ ์ฌ๋ถ๋ฅผ ๊ณ ๋ คํ์ฌ ์ ํ์ ์ฌํ๊ฐํ ์์ ์ ๋๋ค.
Vite๋ ๋ชจ๋์น ๊ฐ๋ฐ์ ์๋ก์ด ํจ๋ฌ๋ค์์ ์ ์ํ๋ฉฐ, ์์ฐ์ฑ๊ณผ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ์ ์ฃผ๋ ฅํ๊ณ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ค์ํ ๊ท๋ชจ์ ํ๋ก์ ํธ์์๋ ์ต์์ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
'IT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Jupyter Notebook: ๋ฐ์ดํฐ ๊ณผํ์์ ํ์ ๋๊ตฌ (0) | 2022.12.02 |
---|---|
[Plugins] Vite Plugins (0) | 2022.11.23 |
[๋ฐ์ดํฐ ๊ตฌ์กฐ] ๋ฐ์ดํฐ ๊ตฌ์กฐ (0) | 2022.11.03 |
Blocking-NonBlocking-Sync-Async (0) | 2022.11.03 |
[JAVA] ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋(static factory method) ๋? (0) | 2022.11.03 |
๋๊ธ