Vue.js v-for

2019-11-18

Webpack

webpack
설명웹팩은 오픈 소스 자바스크립트 모듈 번들러이다. 주로 자바스크립트를 위한 모듈 번들러이지만 호환 플러그인을 포함하는 경우 HTML, CSS, 심지어는 이미지와 같은 프론트엔드 자산들을 변환할 수 있다.
npm init
npm install vue
npm install webpack webpack-cli -D
npm i vue-loader -D
npm i vue-template-compiler -D

vue와 vue compiler는 반드시 버전이 일치해야 하므로 package.json으로 모듈을 관리한다.

package.json

  "dependencies": {
    "vue": "^2.6.10"
  },
  "devDependencies": {
    "vue-loader": "^15.7.2",
    "vue-template-compiler": "^2.6.10",
    "webpack": "^4.41.2",
    "webpack-cli": "^3.3.10"
  }
}

webpack.config.js

const VueLoaderPlugin = require('vue-loader/lib/plugin')
const path = require('path'); // 노드에서 제공하는 모듈

module.exports = {
  entry: {
      app: path.join(__dirname,'main.js'),
  },
  module: {
      rules: [{
        test:/\.vue$/,
        use: 'vue-loader',
      }],
  },
  plugins: [
      new VueLoaderPlugin(),
  ],

  output: {
      filename: '[name].js',
      path: path.join(__dirname, 'dist'),  //'./dist', 절대경로 필요하므로 path.join
  },
};

웹팩은 기본적으로 js만 처리하는데 rule에 vue-loader를 추가해 vue 파일을 처리한다.

또 entry와 output을 보면 .vue와 main.js를 합쳐 output을 ./dist 경로의 app.js 파일로 저장함을 볼 수 있다.

.vue

<template>
    <div>
        <h1></h1>
        <form v-on:submit="onSubmitForm">
            <input ref="answer" maxlength="4" v-model="value"/>
            <button>입력</button>
        </form>
        <div>시도 : </div>
    </div>
</template>
<script>
    export default {
        data() {
            return {
                value: '',
                result: '',
            }
        },
        methods:{
            onSubmitForm(e) {
                e.preventDefault();
            }
        }
    };
</script>
<style>
</style>

main.js

import Vue from 'vue';
import nb from './nb.vue';

new Vue(nb).$mount('#root');

webpack을 사용하는 이유 중 하나는 html에서 한없이 길어지는 script 부분을 따로 관리하기 위해서이다.

기존의 component와 인스턴스를 .vue와 main.js로 옮김으로 html을 간결하게 유지한다.

package.json

  "scripts": {
    "build": "webpack"
  },

package.json의 script 부분에 “build”: “webpack”을 추가한다.

npm run build

빌드를 실행하면 .vue와 main.js가 ./dist 경로에 app.js로 저장되어 html에선 app.js만으로 미리 설정한 컴포넌트와 인스턴스를 활용할 수 있다.

<body>
    <div id ="root"></div>
    <script src="./dist/app.js"></script>
</body>