Node.js & Vue/Cli Project & SFC
π Node.js
Node.js λ
- Node.jsλ Chrome V8 JavaScript μμ§μΌλ‘ λΉλ λ JavaScript λ°νμμ΄λ€.
- μ¦, Nodeλ₯Ό ν΅ν΄ λ€μν μλ°μ€ν¬λ¦½νΈ μ ν리μΌμ΄μ
μ μ€νν μ μμΌλ©°, μλ²λ₯Ό μ€ννλλ° κ°μ₯ λ§μ΄ μ¬μ©λλ€.
- Node.jsλ JavaScriptλ₯Ό μλ²μμλ μ¬μ©ν μ μλλ‘ λ§λ νλ‘κ·Έλ¨μ΄λ€.
- Node.jsλ V8μ΄λΌλ JavaScript μμ§ μμμ λμνλ μλ°μ€ν¬λ¦½νΈ λ°νμ ( νκ²½ ) μ΄λ€.
- Node.jsλ μλ²μ¬μ΄νΈ μ€ν¬λ¦½νΈ μΈμ΄κ° μλλ€. νλ‘κ·Έλ¨ ( νκ²½ ) μ΄λ€.
- Node.jsλ μΉμλ²μ κ°μ΄ νμ₯μ± μλ λ€νΈμν¬ νλ‘κ·Έλ¨μ μ μνκΈ° μν΄ λ§λ€μ΄μ‘λ€.
- Node.jsλ νμ₯μ±μ΄ μλ λ€νΈμν¬ μ΄ν리μΌμ΄μ κ°λ°μ μ¬μ©λλ μννΈμ¨μ΄ νλ«νΌμ΄λ€. νΉν μλ²μ¬μ΄νΈμμ λ§μ΄ μ¬μ©λλ€.
- λ΄μ₯ HTTP μλ² λΌμ΄λΈλ¬λ¦¬λ₯Ό ν¬ν¨νκ³ μμ΄ μΉ μλ²μμ μνμΉ λ±μ λ³λ μννΈμ¨μ΄ μμ΄ λμνλ κ²μ΄ κ°λ₯ νλ€.
- Node.jsλ₯Ό μ΄μ©νμ¬ μΉ λΈλΌμ°μ μ 무κ΄ν νλ‘κ·Έλ¨μ λ§λ€ μ μλ€.
- μ€μν κ²μ Node.jsλ₯Ό μ΄μ©ν΄μ μλ² λ₯Ό λ§λ€ μ μλ€λ κ²μ΄λ€.
- ν κ°μ§ μΈμ΄λ‘ μ 체 μΉ νμ΄μ§λ₯Ό λ§λ€ μ μκ² λ κ²μ΄λ€.
Node.js μ₯μ
- λ©ν° μ€λ λ λ°©μμ λΉν΄ μ μ μ»΄ν¨ν° μμμ μ¬μ©
- I/O μμ μ΄ λ§μ μλ²λ‘ μ ν©
- μΉ μλ²κ° λ΄μ₯λμ΄ μμ΄ λ³λμ μΉ μλ²λ₯Ό μ€μΉν νμκ° μλ€.
- JavaScriptλ₯Ό μ¬μ©νκΈ° λλ¬Έμ JSON νμκ³Ό μ½κ² νΈνλλ€.
JavaScript λ°νμ μ΄λ
- λ°νμμ΄λ νΉμ μΈμ΄λ‘ λ§λ νλ‘κ·Έλ¨μ μ€νν μ μλ νκ²½μ μλ―Ένλ€.
- λ°λΌμ Node.js λ μλ°μ€ν¬λ¦½νΈ νλ‘κ·Έλ¨μ μ»΄ν¨ν°μμ μ€ν ν μ μκ² νλ μλ°μ€ν¬λ¦½νΈ μ€νκΈ°μ΄λ€.
Node.js μ€μΉ κ³Όμ
- Node.js μ€μΉνκΈ°
- node.js μμ LTS λ²μ Ό λ€μ΄λ‘λ
- cmd μμ βnode -vβ λ₯Ό ν΅ν΄ λ²μ Ό νμΈ
- npm package ( Node.js κΈ°λ³Έ ν¨ν€μ§ κ΄λ¦¬μ ) μμ±
- npmμ μ€νλ§μ maven κ°μ κ²κ³Ό λΉμ·νλ€.
- μ μ₯ν ν΄λ cmd μ°½μμ
npm init
μ ν΅ν΄ ν¨ν€μ§ μμ± ( package.json μ΄ μμ±λ¨ ) - npm 곡μ ννμ΄μ§ μμ νμν λͺ¨λ μ€μΉ
- package.json μ΄κ³ μ ν°λ―Έλ μ΄μ΄μ
npm i prompt-sync
μ€μΉ ( git bash μ¬μ© μΆμ² )
- js νμΌ λ§λ€κ³
node js-fileName.js
μΌλ‘ μ€ν
π Vue/Cil Project
@vue/cli μ΄λ
- CLI = Command Line Interface
- Vue.js κ°λ°μ μν μμ€ν μΌλ‘ Vue.jsμμ 곡μμΌλ‘ μ 곡νλ CLI ( κΆμ₯ )
- κ°λ°μ νΈλ¦¬μ±μ μν΄ νμμ²λΌ μ¬μ©
- Vue νλ‘μ νΈλ₯Ό λΉ λ₯΄κ² ꡬμ±ν μ μλ μ€μΊν΄λ© ( μ μ ν μΈμ§μ λμμ μ 곡 ) μ μ 곡
- Vueμ κ΄λ ¨λ μ€ν μμ€λ€μ λλΆλΆμ΄ CLIλ₯Ό ν΅ν΄ ꡬμ±μ΄ κ°λ₯νλλ‘ κ΅¬νλμ΄ μλ€.
Vue/Cli νλ‘μ νΈ μλ¬ μ κ² & μ€μ
- Vue λ μ»΄ν¬λνΈ μ΄λ¦μ ν©μ±μ΄λ₯Ό νμμ μΌλ‘ μ¬μ©ν΄μΌνλ€.
- .vue filenameμ΄ HomeView μ΄λ°μ
- Vue λ end line CRLFλ₯Ό μ§μνμ§ μλλ€ -> LF μΌλ‘ μμ ( μλμ° )
- esline(prettier) error
- package.json -> eslineConfig -> rule μ μΆκ°
- λλ eslintrc.js μ prettier rule μΆκ°
"prettier/prettier": ["error", {"endOfLine": "auto"}]
- vue λ tab space size 2λ§ μ§μ
- vscode -> βctrlβ + β,β -> prettier Tab Width : 2
- κΈ°ν μ€μ
- vscode -> βctrlβ + β,β -> prettier Print Width : 80
- prettier μ€μ μλ£ ν μλ¬κ° λλ νμΌμ κ°μ prettierλ‘ auto formatting ν΄μ£ΌκΈ°
- νμΌ νλ©΄ μ°ν΄λ¦ -> λ¬Έμμμνλ‘κ·Έλ¨
Vue/Cli μ€μ΅ & μ€μ
- Vue Cli λ€μ΄
-
npm install -g @vue/cli
μ€μΉ
-
- Vue/Cli νλ‘μ νΈ μμ±
vue create<project-name>
- μμ± μ€ μ€μ§ :
ctrl+c
- μλ² μ€ν :
npm run serve
- λΈλΌμ°μ :
localhost:8080
- manualy μ ν
- bable, vuex, router, linter μ ν
- vue 2.x λ²μ Ό μ ν
- λΌμ°ν° λͺ¨λ κΈ°λ³Έ history μ¬μ©
- eslint + prettier μ¬μ©
- lint on save yes
- in package.json
- npm λͺ¨λ μ€μΉ ( ννμ΄μ§κ°μ κ²μ )
- axios
- moment ( λ μ§ ν¬λ§·ν ν΄μ£Όλ λꡬ )
- rule μ μΆκ°
- .vue νμΌμ ctrl + spacebar -> κΈ°λ³Έ μμ μ μ©
- img λ assets ν΄λμ
- App.vue μ HeaderNav μ°κ²°
- κΈ°μ‘΄ js νμΌ template λ .vue νμΌ templateλ‘
- routes -> router/index.js
- routerμ μ°κ²°λλ κ²μ views ν΄λμ ( νλ©΄ κ΅¬μ± )
- νμ μ»΄ν¬λνΈ λ€μ components ν΄λμ ( νλ©΄ μμμ λ°λλ κ²λ€ )
- style μ scoped μ€μ ν΄μ κ·Έ νμΌμμλ§ μ¬μ© ( μ€μ μνλ©΄ μ μμΌλ‘ μ°μΌ μ μλ€ )
- μ 체μ μΌλ‘ μ¬μ©νλ styleμ App.vueμ μ μ₯νλ©΄ νΈνλ€.
- src/apiμ ν΄λ μμ±
- http.js νμΌνλ©΄ μμ± ( axios )
- λμ€μ axios μ¬μ©μ import !
import http from "@/api/http"
- rest μ¬μ©μ λ§€λ² url μ μμ ν΄μΌνλ λ²κ±°λ‘μμ μ€μΌ μ μλ€.
// http.js
import axios from "axios";
// axios λ§λ€κΈ°
export default axios.create({
// URL
baseURL: "http://localhost:9999/vue",
// λ΄μμ 보λ΄λ κ²
headers: {
"Content-Type": "application/json",
},
});
π SFC ( Single File Component )
- νμ₯μκ° β.vueβμΈ νμΌ
- .vue = template + script + style
- ꡬ문 κ°μ‘°κ° κ°λ₯
- μ»΄ν¬λνΈμλ§ CSSμ λ²μλ₯Ό μ νν μ μμ
- μ μ²λ¦¬κΈ°λ₯Ό μ¬μ©ν΄ κΈ°λ₯μ νμ₯μ΄ κ°λ₯
SFC - template
<template>
- κΈ°λ³ΈμΈμ΄ : HTML
- κ° *.vue νμΌμ νλ²μ μ΅λ νλμ
<template>
λΈλ‘μ ν¬ν¨ν μ μλ€. ( νκ°μ root element ) - λ΄μ©μ λ¬Έμμ΄λ‘ μΆμΆλμ΄ μ»΄νμΌ λ Vue Componentμ template μ΅μ μΌλ‘ μ¬μ©
SFC - script
<script>
- κΈ°λ³ΈμΈμ΄ : JS
- κ° *.vue νμΌμ νλ²μ μ΅λ νλμ
<script>
λΈλ‘μ ν¬ν¨ν μ μλ€. - ES2015(ES6)μ μ§μνμ¬ import μ export μ¬μ© κ°λ₯
SFC - template
<style>
- κΈ°λ³ΈμΈμ΄ : CSS
- κ° *.vue νμΌμ μ¬λ¬ κ°μ
<style>
νκ·Έλ₯Ό μ§μ - scoped μμ±μ μ΄μ©νμ¬ νμ¬ μ»΄ν¬λνΈμμλ§ μ¬μ© κ°λ₯ν cssλ₯Ό μ§μ κ°λ₯
π μ°Έμ‘°
https://hanamon.kr/nodejs-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/