abarthdew / vue-basic

๐Ÿ”ฐVue.js for Starter๐Ÿ”ฐ

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

vue-basic

  • IDE๋กœ ์‹คํ–‰ํ•˜๊ธฐ ex_screenshot

๋ชจ๋ธ-๋ทฐ-๋ทฐ๋ชจ๋ธ MVVM ๊ตฌ์„ฑ์š”์†Œ

  • ๋ชจ๋ธ: ๋„๋ฉ”์ธ ์˜์—ญ ๋‹ด๋‹น. ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋“ฑ์„ ํ‘œํ˜„
  • ๋ทฐ: ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ธฐ์— ์ ํ•ฉํ•œ ํ˜•ํƒœ๋กœ ํ‘œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์Œ
  • ๋ทฐ๋ชจ๋ธ: ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ ์ƒํƒœ ์œ ์ง€, ๋ทฐ์—์„œ ๋ฐ›์€ ์ž…๋ ฅ์„ ์ ์ ˆํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ชจ๋ธ์— ์ „๋‹ฌ
IDE Webstorm
ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ File - new project - [new project] - [Vue.js]์„ ํƒ - Location(ํด๋” ์ด๋ฆ„) - Vue CLI:npx --package @vue/cli vue
(ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋Œ€๊ธฐ - cli ๋‚˜์ค‘์— ์„ค์น˜ํ•˜๋ ค๋ฉด ๊ทธ๋ƒฅ empty project๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ)
node.js ์„ค์น˜ํ•˜๊ธฐ https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd (vue.js devtools)
vue ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์„ค์น˜ํ•˜๊ธฐ https://nodejs.org/ko/download/ (LTS)
cdn
  • <script src="https://unpkg.com/vue"></script>
  • (๋ผ์šฐํ„ฐ)<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  • (๋ทฐ ๋ฆฌ์†Œ์Šค)<script src="https://cdn.jsdelivr.net/npm/vue-resource@1.5.1"></script>
  • (axios)<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  • vue.js devtool ํ™”์‚ดํ‘œ ํ‘œ์‹œ(๊ฐœ๋ฐœ์ž ๋„๊ตฌ)
  • Root ์ปดํฌ๋„ŒํŠธ : ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ
  • ***๋ทฐ ์ธ์Šคํ„ด์Šค ๋ผ์ดํ”„ ์‚ฌ์ดํด : ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ๋“ค
    beforeCreate data, methods ์†์„ฑ์ด ์ธ์Šคํ„ด์Šค์— ๋ฏธ์ •, ํ™”๋ฉด์š”์†Œ์— ์ ‘๊ทผx
    created data, methods์†์„ฑ ์ •์˜, template ํ™”๋ฉด์š”์†Œ ์ ‘๊ทผx
    beforeMount render()ํ•จ์ˆ˜ ํ˜ธ์ถœ๋˜๊ธฐ ์ง์ „
    mounted el ํ™”๋ฉด์š”์†Œ ์ธ์Šคํ„ด์Šค ๋ถ€์ฐฉ ํ›„ ํ˜ธ์ถœ ๋‹จ๊ณ„, template ํ™”๋ฉด์š”์†Œ ์ ‘๊ทผใ…‡
    beforeUpdate ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ ์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋‹จ๊ณ„
    updated ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝํ›„ ํ™”๋ฉด ์š”์†Œ ๋ณ€๊ฒฝ ์™„๋ฃŒ๋œ ์‹œ์ 
    beforeDestroy ๋ทฐ ์ธ์Šคํ„ด์Šค ํŒŒ๊ดด ์ง์ „ ํ˜ธ์ถœ๋‹จ๊ณ„
    destroyed ๋ทฐ ์ธ์Šคํ„ด์Šค ํŒŒ๊ดด ํ›„ ํ˜ธ์ถœ๋‹จ๊ณ„, ๋ทฐ ์ธ์Šคํ„ด์Šค์— ์ •์˜ํ•œ ๋ชจ๋“  ์†์„ฑ ์ œ๊ฑฐ
    Vue CLI ๋ช…๋ น์–ด
  • Vue CLI 2 ์‚ญ์ œ(์ถฉ๋Œ๋ฐฉ์ง€) : npm r -g vue-cli
  • Vue CLI 3 ์„ค์น˜ : npm i -g @vue/cli
  • ๋ฒ„์ „ ํ™•์ธ : vue --version
  • ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ : ์œ„์น˜ ์ง€์ • ํ›„ vue create [ํด๋” ์ด๋ฆ„]
  • ์‹คํ–‰ : ์œ„์น˜ ์ง€์ • ํ›„ npm run serve
  • ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ(ํ„ฐ๋ฏธ๋„) : ctrl + c
  • npm init : package.json์„ ๋งŒ๋“œ๋Š” ๋ช…๋ น์–ด
  • npm ๋ชจ๋“ˆ ์„ค์น˜(๋กœ์ปฌ): npm install(package.json ํŒŒ์ผ ๋ฐ ํ•ด๋‹น ์ข…์†์„ฑ์— ๋‚˜์—ด๋œ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ์„ค์น˜)
  • npm ๋ชจ๋“ˆ ์„ค์น˜(์ „์—ญ): npm install -g
  • npm ๋ชจ๋“ˆ ์—…๋ฐ์ดํŠธ : npm update
  • npm ๋ชจ๋“ˆ ์‚ญ์ œ : npm uninstall
  • axios ์„ค์น˜ : npm install axios
  • ***npm(Node Packaged Manager)์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  • ์ •์˜ : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ Node.js์˜ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž
  • Node.js๋กœ ๋งŒ๋“ค์–ด์ง„ package(module)์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ํˆด
  • Node.js๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋“ˆ์„ ์›น์—์„œ ๋ฐ›์•„ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ(maven๊ณผ ๋น„์Šท)
  • ์ดํ›„ ๋ชจ๋“ˆ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•  ์‹œ ์•Œ๋ ค์คŒ(๋ฒ„์ „๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•จ)
  • ์˜ˆ์ „์—๋Š” npm์„ ๋”ฐ๋กœ ์„ค์น˜ํ•ด์•ผ ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ node.js๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋‚ด์žฅ(built in)๋˜์–ด ์žˆ์Œ
  • https://m.blog.naver.com/magnking/220961896609
  • http://itnovice1.blogspot.com/2019/01/js-npm.html
  • Vue CLI ํด๋”, ์š”์†Œ
  • [node_modules] : npm install ๋ช…๋ น์–ด๋กœ ๋‹ค์šด๋ฐ›์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๋Š” ์œ„์น˜
  • [src] : .vue ํŒŒ์ผ์„ ๋น„๋กฏํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋กœ์ง์ด ๋“ค์–ด๊ฐˆ ์œ„์น˜
  • [public] - index.html : ๋ทฐ๋กœ ๋งŒ๋“  ์›น ์•ฑ์˜ ์‹œ์ž‘์ (npm run dev ์‹คํ–‰ ์‹œ ๋กœ๋”ฉ๋˜๋Š” ํŒŒ์ผ)
  • ใ„ดpublic ํด๋” ๋‚ด ์š”์†Œ๋Š” ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ๊ฐ€๋Šฅ
    ใ„ดhttp://localhost:9999/nnn/logo.png ์ด๋Ÿฐ์‹์œผ๋กœ ์ฃผ์†Œ ์น˜๋ฉด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
  • package.json : npm ์„ค์ • ํŒŒ์ผ(๋ทฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์ •์˜ํ•˜๋Š” ํŒŒ์ผ)
  • webpack.config.js : ์›นํŒฉ ์„ค์ • ํŒŒ์ผ(์›นํŒฉ ๋นŒ๋“œ๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ๋กœ์ง๋“ค์„ ์ •์˜ํ•˜๋Š” ํŒŒ์ผ)
  • ***package.json ๊ตฌ์กฐ
  • name, description, version, author : ํ”„๋กœ์ ํŠธ ์ •๋ณด
  • scripts{dev, build} : npm ์‹คํ–‰ ๋ช…๋ น์–ด
  • dependencies{}, devDependencies{} : ๋ทฐ, ์›นํŒฉ ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • -ํ”„๋กœ์ ํŠธ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์„ค์ • ํŒŒ์ผ
    -npm ๋ช…๋ น์–ด ๋ฐ ๋ถ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์ž‘ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ •๋ณด๋“ค์„ ํฌํ•จ
    ๋ธŒ๋ผ์šฐ์ € ์ €์žฅ์†Œ์˜ ์ข…๋ฅ˜ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€, ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€, ์ธ๋ฑ์Šค๋“œ ๋””๋น„
    ***์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ๋ฒ•, ๊ทœ์น™
  • npm install ์„ ๋‹ค์‹œ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ : ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‚ด๋ ค๋ฐ›์•˜๋Š”๋ฐ, package.json์— ๋“ฑ๋ก๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ node_modules์— ๋‹ค์šด๋กœ๋“œ ๋˜์ง€ ์•Š์•˜์„ ๋•Œ
  • axios = ajax(ํ”„๋ก ํŠธ์—”๋“œ - ๋ฐฑ์—”๋“œ ๊ฐ„ ํ†ต์‹ )
  • _ : lodash์˜ ๋ณ€์ˆ˜๋ช… (ex) _.shuffle(answers);
  • ... : ๊ฐ์ฒด์˜ ๋ณ€์ˆ˜๋“ค์„ ์ „๊ฐœํ•จ(์ „๊ฐœ ์—ฐ์‚ฐ์ž)
  • ใ„ด๋’ค์— ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉด ๊ฐ์ฒด ์•ˆ์˜ element๋ฅผ ์ „๊ฐœํ•จ(๋ฐ–์œผ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ๋บŒ)
    (ex) [...this.currentQuestion.incorrect_answers] => [1๋ฒˆ์งธ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ,2๋ฒˆ์žฌ,3๋ฒˆ์งธ,4,5,6...]

    ex_screenshot ex_screenshot

    *Vue CLI ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ๊ตฌ๋™ ์ˆœ์„œ

    npm install vue-cli -g(๋ทฐ CLI์„ค์น˜) / vue init webpack-simple(ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ)
    / npm install(ํ”„๋กœ์ ํŠธ ๊ตฌ๋™) / npm run dev(๊ตฌ๋™)
    
    npm init(๋…ธ๋“œ ํŒจํ‚ค์ง€ ์ƒ์„ฑ) / npm install -g @vue/cli(์˜์กด์„ฑ ์ฃผ์ž…) / vue create(cli๋ฅผ ์ด์šฉํ•œ ํƒฌํ”Œ๋ฆฟ ์„ค์ •)
    
    • vue cli ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ
    1. npm init : ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ ๋‹ค
      • ์•คํŠธ๋ฆฌ ํฌ์ธํŠธ : ๋…ธ๋“œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ฒ˜์Œ ๊ตฌ๋™๋  ๋•Œ ์–ด๋–ค ํŒจํ‚ค์ง€๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๊ฒƒ์ด๋ƒ
    2. npm install -g @vue/cli : createํ•˜๊ธฐ ์ „์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง‘์–ด๋„ฃ๋Š” ๋ช…๋ น์–ด
      • @vue/cli : npm์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ํŒจํ‚ค์ง€ ์ด๋ฆ„
    "dependencies": {
        "vue": "^2.6.10"
        }
    //์˜์กด์„ฑ ์ฃผ์ž…
    1. (์›นํŒฉ, ๋นŒ๋“œ ์ƒ๋žต)
    2. vue create : vue create๋Š” vue cli๋ฅผ ์ด์šฉํ•œ ํƒฌํ”Œ๋ฆฟ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ
    • ์„ธ๋ถ€์„ค์ •
      (*) Babel : es6์ด์ƒ์˜ ๊ฒƒ๋“ค์„ es5๋ฒ„์ „์œผ๋กœ ๋ณ€ํ™˜์‹œ์ผœ์คŒ
      ( ) TypeScript :es6 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฒ„์ „(์ผ์ข…์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)
      ( ) Progressive Web App (PWA) Support : ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ด€๋ จ
      ( ) Router : ๋ทฐ ๋ผ์šฐํ„ฐ
      ( ) Vuex : ๋ถ€๋ชจ-์ž์‹ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์–ด๋ ค์›€ / ๋ฐ์ดํ„ฐ ์ƒํƒœ ๊ด€๋ฆฌ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) 
        / ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ทฐ์—‘์Šค์— ๋“ฑ๋กํ•ด๋†“๊ณ  ๊บผ๋‚ด์“ฐ๋Š” ์‹(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ™์Œ)
      ( ) CSS Pre-processors 
        (scss-๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ”๋กœ ์ฝ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— css์—์„œ ๋ณ€ํ™˜๊ณผ์ • ๊ฑฐ์นจ, sass..) : scss,sass๋“ฑ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค
      (*) Linter / Formatter
        : (esLint๊ฐ€ linter์˜ ์ข…๋ฅ˜) linter : ๊ผญ ์ง€ํ‚ค์ง€ ์•Š์•„๋„ ์‹คํ–‰๋˜๋Š” ๊ฐœ๋ฐœ ๋ฌธ๋ฒ•์— ๋Œ€ํ•œ ๋ฃฐ์„ ์ •ํ•จ(์ฝ”๋“œ ์ปจ๋ฐด์…˜ ํˆด)
      ( ) Unit Testing :ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
      ( ) E2E Testing :ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    
    -linter : prittier - save
        -๋ชจ๋“  ์˜ต์…˜๋“ค์€ ๊ฐ๊ฐ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
            ใ„ดdedicated - ๊ฐ๊ฐ
            ใ„ดpackage.json - ์—ฌ๊ธฐ ๋‹ค ๋„ฃ์Œ
    
    # package.json
          "dependencies": { //๊ฐœ๋ฐœํ•  ๋•Œ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
          "core-js": "^3.3.2",
          "vue": "^2.6.10"
          },
          "devDependencies": { //๊ฐœ๋ฐœํ•  ๋•Œ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
          "@vue/cli-plugin-babel": "^4.0.0",
          "@vue/cli-plugin-eslint": "^4.0.0",
          "@vue/cli-service": "^4.0.0",
          "@vue/eslint-config-prettier": "^5.0.0",
          "babel-eslint": "^10.0.3",
          "eslint": "^5.16.0",
          "eslint-plugin-prettier": "^3.1.1",
          "eslint-plugin-vue": "^5.0.0",
          "prettier": "^1.18.2",
          "vue-template-compiler": "^2.6.10"
          }
    
    #cli๋Š” ์›นํŒฉ์„ ํƒ€๊ฒŒ ๋˜์–ด ์žˆ์Œ
      public ํด๋”์™€ ๋‚ด์šฉ๋ฌผ์— ์žˆ๋Š” ๊ฒƒ๋งŒ์ด ์œ ์ผํ•˜๊ฒŒ ์›นํŒฉ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Œ
    

    *Vuex

    ex_screenshot ex_screenshot

    • action -> mutation -> state
    • action :
    • mutation :
    • state :

    • import Home from '@/components/Home.vue' ์—์„œ @๋Š” src ๊ฒฝ๋กœ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค๋ฅผ ๋œปํ•จ
    • main.js๋Š” ๋ทฐ ํ”„๋กœ์ ํŠธ์˜ ์ค‘์•™ํ†ต์ œ์†Œ ๊ฒฉ์ž„
    • $(๋‹ฌ๋Ÿฌ)ํ‘œ์‹œ : new Vue({}) ์— ์ •์˜๋œ ๊ฒƒ๋“ค์€ $ํ‘œ์‹œ๋ฅผ ์“ด ํ›„ ์‚ฌ์šฉ๊ฐ€๋Šฅ
      new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount('#app')
    //(ex) store ์“ธ ๋•Œ $store
    • {} : ๊ฐ์ฒดํ˜•ํƒœ (ex. {mapGetters} : mapGetters๋ผ๋Š” ๊ฐ์ฒด

    #์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ‘œํ˜„์‹๋“ค

      <component v-bind:is="currentView">
      <!-- vm.currentView๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค! -->
      </component>

    reference

    About

    ๐Ÿ”ฐVue.js for Starter๐Ÿ”ฐ


    Languages

    Language:HTML 48.0%Language:Vue 35.8%Language:JavaScript 16.2%