Webpack이란?
여러개의 파일을 하나의 파일로 묶어주는 개발 자동화 도구
먼저 기존 script로 불러오는 것들 type을 module을 지정해서 똑같은 이름의 변수를 다르게 지정하여 사용할 수 있다.
변수 이름의 충돌은 위와 같이 import, export 구문으로 피할 수 있다.
저렇게 지정하면 word라는 변수를 사용할 수 없다.
그리고 import, export는 비교적 최신 기능이어서 오래된 웹 브라우저에서는 동작하지 않는다.
또 Network 탭에서 hello.js와 world.js 파일이 각각 다운로드 받아진다.
변수의 충돌을 없애고 해당 파일들을 각각 받지 않고 하나로 묶어서 자원을 아끼고 각각의 파일을 모듈로 만들어 사용할 수 없을까라는 생각에 번들러가 만들어졌다.
번들러라의 대표주자가 Webpack이다.
웹팩을 설치하여 사용하려면 webpack과 webpack-cli를 설치하면 된다.
위에서 적었던 해당 구문을 새로운 이름의 js로 만들고 저 파일을 번들링하여 사용할 것임
아래의 명령어를 입력하면 index.js에서 번들링된 파일들이 index_bundle.js 라는 파일의 이름으로 생성이 된다.
번들링된 index_bundle.js 라는 파일이 생성이 되고 해당 내용은 아래와 같이 압축되어 있다.
해당 파일을 펼쳐보면 document.querySelector~ 로 내용을 넣었던 부분이 아래와 같이 들어가있다.
그리고 저 번들링된 index_bundle.js 파일을 불러오면 사용할 수 있게 된다.
기존에는 hello.js와 world.js 2군데에서 커넥션을 맺었으나 지금은 번들링된 index_bundle.js 파일 하나만 커넥션을 맺는다.(자원을 아낄 수 있음)
추가적으로 webpack의 설정 파일을 만들어 사용이 가능하다.
아래의 설정은 위의 npx webpack --entry ~ 명령어로 입력했던게 npx webpack 명령어로 실행이 된다.
그리고 mode라는 설정을 통해 개발모드와 운영모드로 다르게 적용시킬 수도 있다.
또, loader를 사용해서 css파일도 번들링하여 사용할 수 있는데, 아래와 같이 설치한다.
설정 파일의 내용도 변경이 되는데 해당 use 설정은 아래부터 실행이 된다.★
css-loader - webpack 안으로 css 파일을 읽어와서 load
style-loader - 가져온 css 코드를 웹페이지 안에 <style> 태그로 주입시켜주는 loader
따라서 css 파일을 읽어오는 'css-loader' 를 아래쪽에 넣었다.
그리고 해당 파일을 import 시키면 번들링되어진다.
여러 개의 파일을 번들링 하고 싶을 때 설정파일을 변경해주어야 한다.
[name]이라고 지정한 부분에 index와 about이라는 이름의 번들링 파일이 각각 생성이 된다.
id,hash 등 여러 파일의 이름을 만들 수 있다.
플러그인을 사용하여 html 템플릿을 생성할 수도 있다.
현재 각각의 구문을 지우고 플러그인을 사용하여 해당의 구문을 넣어주고 싶다.
위와 같이 플러그인 설정을 해주면(더 효율적인 방법이 있을듯) 번들링된 파일들을 불러오는 구문을 각각 넣을 수 있다.
작업하고 있는 소스들이 변경됐을 때 그것을 감지해서 자동으로 컴파일시켜주는 옵션은 아래와 같다.
그리고 npm 패키지를 이용해서 유용한 기능들을 사용할 수 있다.
예를 들어, innerHTML 부분이 마음에 들지 않아서 lodash라는 패키지를 사용하여 변경하고 싶다.
이외 유용한 기능들이 많으니 나중에 찾아서 사용하면 될 듯 하다..
DevServer 라는 기능도 있는데
웹 브라우저를 자동으로 리로드 해주는 live reload
모듈을 수정했을 때 수정된 부분만 바뀌어서 나머지 정보들이 유지되는 hot module replacement가 있다.
'JavaScript' 카테고리의 다른 글
비동기 프로그래밍(Callback, Promise, Async&await)과 AJAX - 4 (0) | 2022.03.20 |
---|---|
비동기 프로그래밍(Callback, Promise, Async&await)과 AJAX - 3 (0) | 2022.03.19 |
비동기 프로그래밍(Callback, Promise, Async&await)과 AJAX - 2 (0) | 2022.03.18 |
비동기 프로그래밍(Callback, Promise, Async&await)과 AJAX - 1 (1) | 2022.03.17 |