[DAY-37] Vue (4)
π ν·κ°λ Έλ & λͺ°λλ λΆλΆλ€λ§ μ 리νλ λλ§μ TIL
π― λͺ¨λ κ°μ λ΄μ©μ μ μ§ μμμ!
μ€λμ μκ°μ?
μΈνλ° κ°μλ₯Ό ν΅ν΄ λ°°μ λ μΉν©μ νλ² λ λ€λ€λ³΄λ μ΄μ λ νμ€νκ² κ°λ
μ΄ μ‘νλ κ² κ°μμ.
κ·Έλλ μ΅μ
μ§μ μ μμ§ λ무 ν·κ°λ €!
[1] μ»΄ν¬λνΈ κΈ°μ΄
μ»΄ν¬λνΈλ μ΄λ ν ꡬ쑰μ μΈ λ¨μμ λλ€.
μ»΄ν¬λνΈμλ κ°μ₯ ν° λ κ°μ§ νΉμ§μ΄ μμ΅λλ€.
- μ¬μ¬μ©
- κΈ°λ₯ ꡬ쑰ν, μΊ‘μν κ°λ₯
λ³΄ν΅ νλμ μ΄ν리μΌμ΄μ μ μ€μ²©λ μ»΄ν¬λνΈ νΈλ¦¬λ‘ ꡬμ±λλ©°
μ»΄ν¬λνΈ λ±λ‘μλ μ μκ³Ό μ§μ λ±λ‘ λ κ°μ§λ‘ λλμ΄μ§λλ€.
μ μμ μΌλ‘ λ±λ‘λ μ»΄ν¬λνΈλ λμ€μ μμ±νλ app μΈμ€ν΄μ€μ ν νλ¦Ώμμ μ¬μ©ν μ μμ΅λλ€.
μ°μ μ μΌλ‘λ μ§μ μ»΄ν¬λνΈλ₯Ό μμ±νκ³ , μ 체 ꡬμμμ 곡ν΅μΌλ‘ μ¬μ©λμ΄μΌ ν μ»΄ν¬λνΈλ€μ μ μμΌλ‘ λ±λ‘νλ κ²μ΄ μ’μ΅λλ€.
μ»΄ν¬λνΈλ λ±λ‘ν μμΉ.component('μ»΄ν¬λνΈμ μ΄λ¦', μ»΄ν¬λνΈμ μ΅μ
)
μ ννλ‘ μμ±λ©λλ€.
[2] μ μμ λ²μ
μ μμ λ²μ (Semantic Versioning) μ¦ μννΈμ¨μ΄ λ²μ μ΄λ μ»΄ν¨ν° μννΈμ¨μ΄μ νΉμ μμ μ μνμ λν΄ μλ³ κ°λ₯ν μ μΌν μ΄λ¦μ μ§μ νλ κ²μ μλ―Έν©λλ€.
[2-1] κΈ°λ³Έ νμ
Major.Minor.Patch
κ°κ° μ£Όλ²μ , λΆλ²μ , μλ²μ μ΄λΌκ³ λ λΆλ¦½λλ€.
- κΈ°μ‘΄ λ²μ κ³Ό νΈνλμ§ μλλ€λ©΄ Major λ²μ μ μ¬λ¦½λλ€. (ꡬ λ²μ μ μ§μνμ§ μλ μμ€μ λ³κ²½)
- μλ‘μ΄ κΈ°λ₯μ μΆκ°νλ©΄ Minor λ²μ μ μ¬λ¦½λλ€.
- λ²κ·Έλ₯Ό κ³ μ³€λ€λ©΄ Patch λ²μ μ μ¬λ¦½λλ€.
[2-2] - μλ³μ νμ
Major.Minor.Patch - identifier
μ΄ λ°©μμ pre release λ²μ μ νκΈ°ν λ μ¬μ©ν©λλ€.
identifierμ -λ‘ μμνλ©° .μ ꡬλΆμλ‘ μ¬μ©ν©λλ€.
- 1.0.0-alpha
- 1.0.0-x.7.z.92
[2-3] + μλ³μ νμ
Major.Minor.Patch - identifier + metadata
λΉλ λ©νλ°μ΄ν°λ₯Ό νκΈ°ν λ μ¬μ©ν©λλ€.
- 1.0.0-alpha+001
- 1.0.0-beta+exp.sha.5114f85
[2-4] κ·μ½
- μ΅μ΄ κ°λ° λ²μ μ 0.1.0μΌλ‘ ν©λλ€.
- μλ¦Ώμλ₯Ό λ§μΆκΈ° μν΄ 0μΌλ‘ μμνλ μ«μλ μ°μ§ μμ΅λλ€. (ex) 1.07.1)
- λΆλͺ¨ λ²μ μ΄ μ€λ₯΄λ©΄ μμ λ²μ μ 0μΌλ‘ μ΄κΈ°νν©λλ€.
[3] SFC
.vue
νμ₯μλ₯Ό κ°μ§ single file componentμ μμ±ν μ μμ΅λλ€.
μ΄λ Webpack, Parcel, Browserify λ±μ λΉλ λꡬ(λ²λ€λ¬)λ₯Ό μ΄μ©ν΄ λΈλΌμ°μ μμ λμνκ²λ λ§λ€ μ μμ΅λλ€.
SFCλ λ³΄ν΅ 3κ°μ§ ꡬ쑰λ₯Ό κ°μ§λλ€.
<template>
<h1>{{ msg }}</h1>
</template>
<script>
export default {
data() {
return {
msg: "Hello Vue~",
};
},
};
</script>
<style lang="scss">
h1 {
color: orange;
}
</style>
μ΄λ¬ν 3κ°μ§ ννλ₯Ό κ°μ§ νλμ SFCλ₯Ό λͺ¨λ ννλ‘ κ°μ Έμ€κ³ , λ΄λ³΄λ΄λ©° νμ₯μ μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
[3-1] λ²λ€λ¬
λ²λ€λ¬λ μ΄λ ν κ²λ€μ λ¬Άμ΄λΈλ€λ μλ―Έλ₯Ό κ°μ§κ³ μμ΅λλ€.
μ΄μ κ°μ λ²λ€λ¬λ λΈλΌμ°μ μμ ν΄μν μ μλ vue, react
λ±μ νμΌλ€μ
λΈλΌμ°μ μμ ν΄μν μ μλ ννλ‘ λ¬Άμ΄ μ¬μμ±ν΄μ€λλ€.
[1] Parcel
parcelμ λ²λ€λ¬μ μ¬λ¬ μ΅μ λ€μ μΈλΆμ μΌλ‘ μ§μ ν μλ μμ§λ§, νΈλ¦¬ν©λλ€.
κ·λͺ¨κ° ν¬μ§ μμ νλ‘μ νΈμμ μ μ¬μ©λ©λλ€.
parcelμ ν΄λΉ λͺ λ Ήμ΄λ‘ μ€μΉν μ μμ΅λλ€.
npm i -D parcel (κ°λ° λͺ¨λμμλ§ μ¬μ©ν©λλ€.)
"scripts": {
"dev": "parcel src/index.html"
},
μ§μ μ μ ν¨κ» μ§μ ν΄μ€λλ€.
parcelμ λ²λ€λ¬ κΈ°λ₯μ μ¬μ©νκΈ° μν΄μ λ€μ 컀μ€ν λͺ λ Ήμ΄λ₯Ό μ¬μ©ν μ μμ΅λλ€.
npm run dev
μ£Όμν μ μ parcelμ μ°λ¦¬κ° νμν λͺ¨λ ν¨ν€μ§λ€μ μλμΌλ‘ μ€μΉν΄μ£Όλ κ²μ΄ μλλλ€.
λ°λΌμ sassμ κ°μ λ³λμ μ¬μ©ν ν¨ν€μ§λ λ°λ‘ μ€μΉν΄μ€μΌ ν©λλ€.
[2] Webpack
webpackμ λ²λ€λ¬μ μ¬λ¬ λ²λ€ μ΅μ λ€μ μΈλΆμ μΌλ‘ μ§μ ν΄μ€ μ μμ΅λλ€.
λν parcelλ³΄λ€ ν¨μ¬ λ€μν μ΅μ λ€μ΄ μ‘΄μ¬ν©λλ€.
webpackμ λ€μ λͺ λ Ήμ΄λ‘ μ€μΉν μ μμ΅λλ€.
npm i -D webpack webpack-cli // webpackμ ν°λ―Έλλ ν¨κ» μ€μΉν©λλ€.
"scripts": {
"build": "webpack"
},
Webpackμ webpack.config.js
νμΌμ μ¬μ©ν΄μ μ¬λ¬ μ΅μ
μ μ§μ ν΄μ€ μ μμ΅λλ€.
const path = require("path");
const { VueLoaderPlugin } = require("vue-loader");
const HtmlPlugin = require("html-webpack-plugin");
const CopyPlugin = require("copy-webpack-plugin");
module.exports = {
resolve: {
extensions: [".vue", ".js"],
alias: {
"~": path.resolve(__dirname, "src"),
},
},
entry: "./src/main.js",
output: {
path: path.resolve(__dirname, "dist"),
clean: true,
},
module: {
rules: [
{
test: /\.vue$/,
use: "vue-loader",
},
{
test: /\.s?css$/,
use: ["vue-style-loader", "css-loader", "sass-loader"],
},
],
},
plugins: [
new VueLoaderPlugin(),
new HtmlPlugin({
template: "./src/index.html",
}),
new CopyPlugin({
patterns: [{ from: "static" }],
}),
],
};
μ λ§ λ§μ μ΅μ μ μ§μ ν΄μΌν¨μ μ μ μμ΅λλ€.
webpack λν λ³λμ μ¬μ©ν ν¨ν€μ§λ μ λΆ μ€μΉν΄μ€ ν, wepack.config.js νμΌμ λ±λ‘ν΄μ μ¬μ©ν΄μΌ ν©λλ€.
λκΈλ¨κΈ°κΈ°