Skip to content

AI-Trolls/vue-study

This branch is 1 commit ahead of master.

Folders and files

NameName
Last commit message
Last commit date
Feb 12, 2022
Dec 31, 2022
Jan 2, 2019
Jan 3, 2019
Feb 12, 2022
Feb 12, 2022
Feb 12, 2022
Mar 14, 2019
Jan 2, 2019
Jan 2, 2019

Repository files navigation

vue 정리

  • 'vue.js 첫걸음' 및 강의 참고
  • 헷갈리는 개념만 readme 에 정리
  • 코드는 따로작성!

vue-cli 3 기반의 기본기 정리

vue-cli 2 기반

CDN

  • 웹페이지에 vue 라이브러리 포함시킬 경우 이용
https://unpkg.com/vue@<version>/dist/vue.js
https://unpkg.com/vue@<version/dist/vue.min.js

https://cdn.jsdelivr.net/npm/vue@<version>/dist/vue.js
https://cdn.jsdelivr.net/npm/vue@<version>/dist/vue.min.js

https://cdnjs.cloudflare.com/ajax/libs/vue/<version>/vue.js
https://cdnjs.cloudflare.com/ajax/libs/vue/<version>/vue.min.js

vue-cli

  • node는 알아서 설치
  • npm install -g vue-cli (참고, vue-cli 3는 다르게 깔음)
  • vue init webpack hello

빌드(모듈화)방식/형식과, 빌드도구(모듈번들러) -> 일단 쓸줄 몰라도. 뭔지는 알고 있어야

  • 참고로 vue-cli는 기본 '빌드' 템플릿으로 webpack, browserify 등을 제공

    • 빌드란 것이 필요 한 것인지????? 궁금스해서 정리함
  • 빌드 도구가 필요한 이유는, 자바스크립트가 기본적으로 '모듈화 기능'을 지원하지 않기 때문

    • 모듈화가 되어서 하나로 잘 묶인다면 브라우저에서 쓰기 편하니까 그런가?
      • ㅇㅇ, webpack 이나 browserify와 같은 모듈번들러를 이용하면
        프로그램을 single file로 만들 수 있어 쉽게 배포 가능!
  • UMD (Universal Module Definition) 빌드 방식

    • 'UMD 기반으로 작성한 모듈 파일'이 있으면 브라우저에서 vue.js 파일을 쉽게 사용할 수 있다!?
    • ★ Vue 라이브러리는 내부적으로
      • (템플릿을 컴파일하는 부분 + 컴파일된 코드 및 vue 코드를 실행하는 런타임 부분)으로 나눔
    • UMD 기반으로 번들링된 vue.js 라이브러리 파일의 경우에
      • (컴파일러 + 런타임 부분을 합한) 버전인 vue.js or vue.min.js
      • (런타임 부분만을 포함한) vue.runtime.js or vue.runtime.min.js 라이브러리 파일들을 제공한다.
    • 따라서 템플릿이 미리 컴파일 되어 있다면, 런타임 라이브러리만 포함시켜 번들링할 수 있다.
      -> 이 경우 컴파일러가 없으므로 용량이 30%정도 줄어든다고함...(컴파일러까지 포함된 빌드 파일에 비해)
    • 그렇기 때문에, 만약 웹페이지에 vue template을 구현한다면,
      웹페이지에 CDN을 추가할 때, 반드시 컴파일러가 포함된 라이브러리를 사용해야함.
      • 먼 느낌인지만 알겠다.
  • UMD, CommonJS, Browserify, Webpack 등 듣도 보지도 못한 용어들이 계속 나오는데!!!!!

    • UMD, CommonJS모듈 형식; 모듈 방식, 빌드 형식을 말하는 것 같고
    • Browserify, Webpack은 모듈 형식에 기반한 모듈 번들러; 빌드도구를 의미하는 것 같다...
      (책에 뭔가 두서없이 정리되어있어 답답스ㅡㅡ;)
  • 번들러 역할은, 걍 프로젝트를 번들화 해서 하나로 묶어주는 역할인 듯 ( + 코드 난독화 및 압축의 효과 )

  • CommonJS에 대해서 간략히 살펴보면 (이또한 UMD 같은 빌드 타입인듯 싶다)

    • ES6가 나오기 이전에 자바스크립트 모듈화를 위해 사용하던 것
    • Node.js 에서 채택한 방식이라고함
    • vue.js 는 commonjs 기반의 빌드를 위한 파일또한 제공한다
      • (vue.common.js, vue.runtime.common.js)
      • commonjs 모듈 형식의 파일은 browserify, webpack 1등의 모듈 번들러와 사용 가능하다!!
        • 이 CommonJS 기반의 번들러인 Browserify 에 대해서 간단히 살펴보면
          bundle
          - node_module
            - sum.js
            - vue.common.js (vue 라이브러리)
          - main.js
          - index.html
          
          sum.js
          function sum(i, j) {
            return i + j
          }
          module.exports = sum;
          main.js
          var sum = require("sum");
          var Vue = require("vue.common"); // commonjs 기반으로 제공되는 vue.js 파일
          
          var app = new Vue({
            el: "#app",
            data: {
              message: sum(1,3)
            }
          });
          index.html
          <div id="app">
              {{ message }}
          </div>
          <script src="bundle.js"></script>
          뭐, 이런식으로 구조를 만들고 나서 browserify를 이용한 번들링을 하면!!
          브라우저에 구현이 안된 CommonJS 기반으로 모듈을 불러오는 작업을 위해서
          js파일을 하나로 묶어버릴 수 있다.
          (여기서 commonjs 기반의 모듈이 왜나오냐면, browserify에서 지원하는 '모듈 형식' 중 하나기 때문) bundle.js 라는 아웃풋으로.
          browserify main.js -o bundle.js
          
          파일 하나로 번들링 해버림 (bundle.js만 포함하면 vue.js 는따로 요청 안해도됨, 이미 합해져있어서)
          • 추가적으로, Browserify는 파일만 합쳐줄 뿐,
            난독화/압축 작업 안하기 때문에 필요하면 uglify라는 것을 이용.
          • 주의할 점 하나, Browserify는 모듈 파일이 node_modules에 모두 존재해야 하므로, 주의
        • Webpack 1
          • 바로 앞 예제를 webpack 1 번들러를 통해서 번들링할 수도 있음
          • npm install -g webpack@1
          • webpack main.js bundle.js 하면 끝
          • 여러 추가 기능이 있음
  • ES Module

    • UMD, CommonJS같은 모듈 방식(빌드 방식)
    • 2015년 발표한 ES6 이후 서버사이드(nodejs) 및 클라이언트(웹페이지) 개발 모두에서 사용할 수 있는 '모듈화 형식'
    • vue.js 는 ES6 이상의 모듈(ES Module)을 빌드하기 위해 vue.esm.js, vue.runtime.esm.js 를 제공함
      • ES 라이브러리? (ES6 스크립트에서 사용할 수 있도록 빌드된 vue.js 라이브러리 파일)
    • ES Module 빌드 프로젝트 구조
      bundle
      - node_modules
        - sum.js
        - vue.js
      - webpack.config.js
      - main.js
      - index.html
      
      ES Module 빌드를 위해 vue.js 설치
      npm install vue
      sum.js
      export default function (i, j) {
        return i + j;
      }
      
      main.js
      import Vue from "vue"
      import sum from "sum"
      
      const app = new Vue({
       el: "#app",
       data: {
        message: sum(1, 5)
       }
      });
      이후에, webpack 3 모듈 번들러 필요
      npm install -g webpack@3
      
      webpack.config.js (앱을 빌드 할 때, 어떤 스크립트를 번들 파일로 만들고, 위치 시키고, 최적화 시킬지)
      const webpack = require('webpack');
      var path = require('path');
      
      module.exports = {
        entry: {
          app: './main.js'  // app이라는 key는 [name]으로 재사용 가능, value는 번들링 대상
        },
        output: {
          path: path.resolve(__dirname, './dist'),
          filename: '[name].js',  // 번들링 이후에 /dist/app.js 가 생성될 것임
          publicPath: '/'
        },
        plugins: [
          new webpack.EnvironmentPlugin(['NODE_ENV'])
        ],
        resolve: { // ES Module을 불러 사용하기 위해 옵션 추가.
          alias: {
            'vue$': 'vue/dist/vue.esm.js' // js 파일에서 어떤 이름으로 ES Module을 참조할지 지정
          },
          extensions: ['.js'] // webpack 실행시, 명시된 확장자와 일치하는 파일 내에선(?) alias 옵션 참조 가능
        },
      }
      index.html
      <div id="app">
        {{ message }}
      </div>
      <script src="dist/app.js"></script>
      마지막으로
      webpack
      
      명령어를 실행함으로써 app.js를 생성한다.
  • 이 외에도, Rollup 모듈 번들러도 있다고함. (webpack3같은 ESM 전용 번들러)

    • 궁금스 하면 책참고

static 폴더 만들기

  • vue.config.js
module.exports = {
  // ...
  build: {
    assetsPublicPath: '/',
    assetsSubDirectory: 'static'
  }
}
  • 그런데 에러 발생: ERROR Invalid options in vue.config.js: "build" is not allowed
  • 걍 public