본문 바로가기
Today I learned

브라우저 밖으로 나온 자바스크립트 - 웹팩 (1)

by soheemon 2020. 7. 13.

생활코딩 Webpack강의를 들으며 작성한 내용입니다.

Webpack

1.웹팩 이전의 세계와 모듈

이름이 충돌하는 문제 발생, 모듈의 등장

  • 규모있는 어플리케이션에서 각각의 개발자들이 사용하고있는 변수의 이름이 중복될 가능성이 있다.

    1)모듈화 전

    <html>
      <head>
          <script scr="./source/hello.js"></script>
          <script scr="./source/world.js"></script>
      </head>
    <body>
     <h1>Hello, Webpack.</h1>
     <div id="root"></div>
     <script>
      document.querySelector('#root').innerHtml = word;    //충돌.
     </script>
    </body>
    <html>
    
    // source/hello.js
    var world = "Hello";
    
    // source/world.js
    var world = "World";

    2)모듈화 후.

  • hello.js, world.js를 따로 다운로드 받게된다. 네트워크 커넥션이 증가한다. 네트워크 부하 발생.

  • 모듈화를 하면 마치 하나의 디렉토리처럼 hello.js안에서 사용하는 js 변수는 해당 파일안에서만 사용할 수 있다.

    <script type="module">
      import hello_word "./source/hello.js"
      import world_word "./source/world.js"
      document.querySelector('#root').innerHtml = hello_word + world_word;    //충돌이 발생하지 않는다.
    </script>
    
    // source/hello.js
    var world = "Hello";
    export default word;
    
    // source/world.js
    var world = "World";
    export default word;

아래의 요구사항을 충족하기 위해 번들러 등장

  • 웹에서도 모듈을 사용하고 싶다.
  • 여러개의 파일을 묶어서 제공하고 싶다

2.웹팩의 도입

  • 구형브라우저에서도 사용할 수 있도록(import/export가 비교적 최신 문법이기 때문)

  • 파일을 여러개 묶어서 사용할 수 있도록 번들링

    번들링을 사용하기 위해서 Node.js의 패키지로 사용할 필요가 있음

  • Node.js 설치

    npm install -D webpack webpack-cli // -D 개발을 하기위한 옵션
  • index.js : 입구에 해당하는 js(엔트리 파일) 웹팩을 이용해서 엔트리파일을 번들링하자. => hello.js + world.js

      import hello_word "./source/hello.js"        //index.js의 입장에서 경로를 적어야 함
      import world_word "./source/world.js"
      document.querySelector('#root').innerHtml = hello_word + world_word;

    번들링

    npx webpack --entry ./source/index.js --output ./public/index_bundle.js

index.html 수정

  • hello.js랑 world.js를 각각 다운로드 할 필요 없이 index_bundle.js만 가져오면 된다
  • index_bundle.js안에서 import/export 같은 최신 js코드를 크로스브라우징 처리해준다.
    <html>
      <head>
      </head>
    <body>
     <h1>Hello, Webpack.</h1>
     <div id="root"></div>
     <script src"public/index_bundle.js"/>
    </body>
    <html>

3. 설정 파일의 도입

  • 웹팩명령어를 사용하면 다양한 파일을 번들링 해준다.
  • 명령어 대신에 설정파일을 이용할 수도 있다.
  • INPUT -> PROCESS -> OUTPUT이 기본 INPUT은 버들링이 필요한 파일들 PROCESS는 웹팩에게 모듈화 시킬것 OUTPUT 모듈화된 결과

webpack.config.js

  • 공식 홈페이지 CONFIGURATION 참고. cheatsheet처럼 사용하자
    const path = require('path'); //node.js에서 제공하는 경로인듯
    module.export = {
    entry:"./source/index.js",
    output:{
      path:path.resolve(__dirname, "public"),
      filename:'index_bundle.js'
    }
    }

    config 파일을 사용해서 번들링

  • npx webpack --Config webpack.config.js
  • 해당 config파일안에 작성된대로 실행하게 된다.
  • 파일명이 webpack.config.js면 그냥 npx webpack만 쳐도 번들링을 해준다.

4. 운영 모드의 도입

  • 실서버용과 개발용 앱은 설정이 각각 다르다
  • webpack에서 제공하는 dev, prod 모드의 특징과 모드의 설정방법을 살펴보자.

댓글