์ฝ์ดํ์์ ๋ง์น๊ณ ์ค๋๋ง์ ๋ฐฐ๋๋ฏผํด์ ์น๊ณ ์๋ค.
๋ ์จ๊ฐ ์ถ์์ ๊ทธ๋ฐ์ง ์ด๊นจ๊ฐ ์ข ๋ก๊ธด๋ค. ๊ทธ๋๋ ์ค๋งค์ ๋ง์ด ์น๊ณ ์ค๋๊น ์คํธ๋ ์ค๋ฅผ ๋ค ํ๋ ธ๋ค. ๋ด ์ถ์ ๋์ธ ๋ฐฐ๋๋ฏผํด ๋ชป ๋์ด...
Vue์ ๊ฐ์๋์ด ์๋นํ๋ค. ํ์ง๋ง ์๊ฐ๋ณด๋ค Vue์ ๋งค๋ ฅ๋ ํน ๋น ์ง๋ ์ค์ด๋ค. ์ด๋ฒ ๋ฅ๋ค์ด๋ธ๋ฅผ ์ ์ฒญํ์ง ๋ชปํ์ง๋ง ๋ค์ ๋ฅ๋ค์ด๋ธ ๋ Vue์ ๋ํด ์ข ๋ ์ธ์ธํ๊ฒ ๊ณต๋ถํ๊ณ ์ด์ ๋ํด ๋ฐํ๋ฅผ ์งํํด๋ณผ๊น ์๊ฐ์ค์ด๋ค.
Vue ํ๋ก์ ํธ๋ฅผ ๋ฒ๋คํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ Webpack์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Webpack ๋ฒ๋ค์ ๋ํ ์ค์ ์ ์ง์ ํ๋ webpack.config.js
ํ์ผ์ด ์กด์ฌํ๋ค.
// webpack.config.js ํ์ผ
const path = require('path')
module.exports = {
entry: './src/main.js',
ouput: {
path: path.resolve(__dirname, 'dist'),
}
// ๋ค๋ฅธ ์ค์ ์์ฑ๋ค์ด ์กด์ฌํ ์ ์๋ค...
}
์ด ๋ ๋ฒ๋ค ์์ ๊ธฐ์ค ์์น์ธ entry
๋ ํ์ฌ webpack.config.js
ํ์ผ ์์น ๊ธฐ์ค์ผ๋ก ์์ฑ์ ํด๋ ๋ฌด๋ฐฉํ๋ค. ์ ์ผ ์ฒ์ ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง output
์์ฑ์ ์กฐ๊ธ ์ํฉ์ด ๋ค๋ฅด๋ค.
ํ์ฌ ์ฝ๋์์๋ output
์๋์ ์ถ๊ฐ์ ์ธ ์ค์ ์์ฑ์ด ์์ง๋ง ์ค์ ๋ก ๋ฒ๋ค์ ์งํํ๋ฉด ์๋ง์ ์ค์ ์์ฑ๋ค์ด ์ถ๊ฐ๋๋ค.
์ด ์์ฑ๋ค์ด ๋ค ์ ์ฉ๋๊ณ ๋ง์ง๋ง์ output
์์ฑ์ด ์ ์ฉ๋๋ฏ๋ก ๋ฒ๋ค์ด ์๋ฃ๋ ํ์ผ์ ์์น๋ฅผ ์ง์ ํ ๋ ํ์ฌ webpack.config.js
์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค์ ํ๋ฉด ์์นซ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ํ์ด ์๋ค.
๋ฐ๋ผ์ path.resolve
๋ฅผ ํตํด ํ์ฌ ๋๋ ํฐ๋ฆฌ ์ด๋ฆ __dirname
๊ธฐ์ค์ผ๋ก 'dist'๋ ํด๋๋ฅผ ์์ฑํด์ ํด๋น ํด๋์ ํ์ผ์ด ์์นํ๋๋ก ์ค์ ํด์ฃผ๋ ๊ฒ์ด ์์ ํ๋ค.
๋ ์์ง ์ฌ์ฉ์ ์ด๋ฆ์ด ์ต๋ฅ์ด
๋ก ๋์ด ์๋ค. ๋
ธํธ๋ถ ์ฒ์ ์ด ๋๋ ๊ฐ๋ฐ์๋ฅผ ์๊ฐ๋ ์ํ๊ณ ์์๋ ์ ์์ ๊ธฐ๊ณตํ๊ณผ ๋ํ์์ด์๊ธฐ์.. ๋ฌดํฑ๋๋ก ์ฌ์ฉ์ ์ด๋ฆ์ ์ ๋ ๊ฒ ์ง์ ํด๋ฒ๋ ธ๋ค. (๊ท์ฝ๊ธด ํ๊ฐ..?)
์ค๋ ๊ฐ์ ์ค parcel๋ก ํ๋ก์ ํธ๋ฅผ build๊ฐ dev ์๋ฒ ๊ณผ์ ์ ๋๋ ค์ผ ํ๋ ์ํฉ์ด ์์๋ค.
๊ฐ๋ฐ์๋ฒ๋ฅผ ์ ์ ์ค๋จํ๋ค๊ฐ ๋ค์ dev ์๋ฒ๋ฅผ ์คํ์ํค๋ฉด ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ณผ ์ ์์๋ค. ๊ฐ์ฌ๋๋ ํ์ผ ๊ฒฝ๋ก ์์ ํ๊ธ์ด๋ ๊ณต๋ฐฑ์ด ์์ด์ผ ํ๋ค๊ณ ์ธ๋ป ๋งํด์ฃผ์
จ๋๋ฐ ์ด๋ฐ ์ด์ ์ธ ๊ฒ ๊ฐ์๋ค.
์ด์ฉ ์ ์์ด ๊ณ์ํด์ .parcel_cache
ํด๋๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๋น๋ํด์ผ ํ๋ ๋ถํธํจ์ด ํ์ฌ ์๋ ์ํ๋ค...
์กฐ๋ง๊ฐ ํ ํ๋ก์ ํธ๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์ํ๊ธฐ ์ ์ ํฌ๋งท์ผ๋ก ์์ผ๋ฉด์ ์ฌ์ฉ์ ์ด๋ฆ ์์ด๋ก ์ค์ ํด์ผ๊ฒ ๋ค ใ ใ ๋ญ๋ก ํ์ง? ikdungii ??
์ปดํฌ๋ํธ๋ก ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๊ฒ ๋๋ฉด ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ์ style์ ์ง์ ํ ๋ ์๋ก ์ค์ผ๋์ง ๋ง์์ผ ํ ์์ฑ๋ค์ด ์กด์ฌํ๋ค.
์ด๋ด ๊ฒฝ์ฐ์ ๊ทธ๋ฅ style์ ์ง์ ํ๊ฒ ๋๋ฉด ์์ ์ปดํฌ๋ํธ์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ ์์์๊น์ง style ์ ํ์๊ฐ ํฉ์ณ์ ธ์ ์์น ์๋ ์์์๋ ์ ์ฉ๋์ด๋ฒ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
// App.vue
<template>
<h1>{{ msg }}</h1>
<Hello />
</template>
// Hello.vue
<template>
<h1>Hello</h1>
</template>
<style>
h1 {
color: royalblue;
}
</style>
Hello.vue
์ ์ ์ฉํ ์คํ์ผ์ด App.vue
์ h1
ํ๊ทธ์๋ ์ ์ฉ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด์ ํ์ํ ๊ฒ์ด scoped
์ต์
์ด๋ค.
// Hello.vue
//...
<style scoped>
h1 {
color: royalblue;
}
</style>
์์ ๊ฐ์ด style
ํ๊ทธ์ ํด๋น ์ต์
์ ์ง์ ํ๋ฉด Hello.vue
์ปดํฌ๋ํธ์๋ง style ์ค์ฝํ๊ฐ ์ง์ ๋๋ฏ๋ก ์ธ๋ถ๋ก style ์์ฑ์ด ์ค์ผ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ค.
h1
ํ๊ทธ ๋ค์ ํน์ ํ data
๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๊ณ css์๋ ์์ฑ์ ํ์ []
๊ฐ ์ถ๊ฐ๋์ด์ ๋ฒ์๊ฐ ์ถ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ฐ ์ปดํฌ๋ํธ ๊ฐ์ ์คํ์ผ์ ๋ ๋ฆฝ์ฑ์ ์ ๊ณตํ๋ ์ต์ ์ด๋ ๋ฐ๋์ ์์๋ฌ์ผ ํ ๊ฐ๋ ์ด์๋ค.
์ปดํฌ๋ํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ฃผ๊ธฐ ์ํด์๋ Props๋ฅผ ์ฌ์ฉํ๋ค.
ํ์ง๋ง template ์์์์ Vue ์ดํ๋ฆฌ์ผ์ด์
์์ฑ ์์์์ ํ๊ธฐ ์ ์ฐจ์ด์ ์ด ์๋ค.
๋จผ์ , template ์์์์ props๋ kebab-case
๋ก ํ์ดํ์ ์ฌ์ฉํด์ ์์ฑํด์ผ ํ๋ค.
<blog-post post-title="hello!"></blog-post>
์ด๋ ๊ฒ ๋๊ฒจ์ค props๋ฅผ ํด๋น blog-post
์ปดํฌ๋ํธ ์์์ ์ ์ํ ๋๋ camelCase
๋ก props
์์ฑ์ ๋ฐฐ์ด์ ์ถ๊ฐํด์ผ ํ๋ค.
// App.Vue
app.component('blog-post', {
//...
props: ['postTitle'],
}
์ด๊ฒ์ ๊ฐ ํ๊ฒฝ์์ props๋ฅผ ์๋ณํ๊ธฐ ์ํ ๋ด๋ถ ํ ํ๋ฆฟ ๋ฌธ๋ฒ์ด๋ฏ๋ก ๊ผญ ์๊ธฐํด์ผ๊ฒ ๋ค.
๊ทธ๋๋ ๋๋ฆ TIL์ ๊พธ์คํ ๋ค์ ์์ฑํ๊ณ ์๋ค. ๋จ์ ๋ด์ฉ ์ ๋ฆฌ๊ฐ ์๋ ๊ฐ์๋ณ๋ก ํต์ฌ ๋ด์ฉ์ ํ๋๋ง ๋ด๊ฐ ๋ฝ์์ ์ด๊ฑฐ ํ๋๋งํผ์ ๊ผญ ๊ธฐ์ตํ์๋ ๋ง์์ผ๋ก ๊ธฐ๋กํ๊ณ ์๋ค. ์๊ฐ๋ณด๋ค ํ์ต ํจ๊ณผ๊ฐ ๋์์ง๋ ๊ฒ ๊ฐ์ ์ข๋ค! ๊ณ์ํด์ ์ด๋ ๊ฒ ๊ฐ๋ณด์๊ณ !
์ด์ ๋ฐฐ๋๋ฏผํด์ ์น๊ณ ๋์ ์กฐ๊ธ๋ง ์ฌ์ด์ผ์ง ํ๋ค๊ฐ ๊น๋นก ์ ๋ค์ด๋ฒ๋ ธ๋ค. ๋ ๋จ๋๊น ์์๋ฆฌ๊ฐ ์งน์งน ใ ใ ใ ใ . ํผ๋ก๊ฐ ์๊ฒ ๋ชจ๋ฅด๊ฒ ์์ฌ ์์ด์ ๊ทธ๋ฐ์ง ๊ธฐ์ ํ๋ ๋น๋๊ฐ ์์ ์ฆ๋ค. ํน ์ค์ง๋ง ์๋๊นจ๋(?) ๊ฑด๊ฐ ์ฑ๊ธฐ์.
Vue์ ๋ํด์ ๊ณต๋ถํ๋ฉด์ Vue๋ง์ ๋จ์ ์ด ์๋๋ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๊ธฐ๋ฅ์ด๋ ์์ฑ ๋ฐ ํค์๋๊ฐ ์กด์ฌํ๋ ๊ฒ์ ๋ณด๊ณ ํฅ๋ฏธ๋ก์์ ๋ง์ด ๋๋๋ค. ์ด๊ฒ๋ค์ TIL๋ก ์์ฑํ๊ณ ์๋๋ฐ ์ด ์ ๋ฆฌํด์ ๋ฅ๋ค์ด๋ธ๋ฅผ ์งํํด๋ด๋ ์ข๊ฒ ๋ค๊ณ ์๊ฐ์ด ๋ ๋ค. ํด๋ณด...์?
๐ ํด๋น ๋ด์ฉ์ ๊ณต๋ถํ๋ฉด์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ํ๋ฆฐ ๋ถ๋ถ์ด๋ ์คํดํ๊ณ ์๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ํผ๋๋ฐฑ ๋ถํ๋๋ฆฝ๋๋ค.
์ต๋ฅ์ด๋ ์์ ์ฝ๋ํ์ด๋ผ์ดํธ ์๋ง html๋ก ํ๋ฉด ๋ ๊ฒ ๊ฐ์์(?)