번들러
를 왜 사용할까요?
웹 초창기에는 js, css, html 파일로만 이루어졌을정도로 웹사이트의 규모가 크지 않았습니다. 하지만 점차 기술이 발전하면서 웹을 구성하는 파일의 수도 증가하게 되면서 여러 문제들이 발생했습니다.
대표적인 문제점으로는 중복된 이름으로 인한 충돌과 파일 전송 속도 문제 등이 있었는데 이 문제들을 해결하기 위해서 여러개의 파일을 하나로 묶어주는 번들러가 나오게 되었습니다.
대표적으로 webpack
, parcel
, rollup
등이 존재하고 이 중에서는 webpack 이 주로 사용되고 있습니다.
자바스크립트 어플리케이션의 Static Module Bundler로, 의존 관계에 있는 자바스크립트, css, 이미지등의 리소스들을 하나 또는 여러 개의 파일로 번들링하는 모듈 번들러입니다.
위 이미지처럼 서로 연관 있는 모듈 간의 관계를 해석하여 정적인 자원 (javascript)으로 변환시켜주는 도구라고 생각하면 됩니다.
어플리케이션 동작과 관련된 여러 개의 파일(HTML, css, js, Image 등)들을 1개의 js로 변환하고, 이 js파일만 브라우저에서 로딩하면 어플리케이션이 실행됩니다.
$ npm i -D webpack-cli webpack-dev-server
여기서
webpack.config.js
파일을 통해 webpack을 설정할 수 있습니다.
작업하려는 프로젝트의 가장 상위 폴더에 webpack.config.js
파일을 생성하면 됩니다.
entry: './main.js',
이름 그대로 웹팩을 실행할 대상 파일의 진입점과 경로 정의를 정의합니다.
보통 웹 애플리케이션의 전반적인 구조와 내용이 들어있어 있는 메인 JS 파일을 지정합니다.
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'main.js', // 기본값이므로 생략 가능
clean: true,
},
웹팩을 실행 후 최종 번들링된 결과 출력합니다.
빌드 결과물의 위치과 파일이름 등 설정이 가능합니다.
path: path.resolve(__dirname, 'dist')
은 기본값으로 생략이 가능합니다.module: {
// Loader
rules: [
{
test: /\.s?css$/,
use: ['style-loader', 'css-loader', 'sass-loader'], // use 배열은 뒤에서부터 적용
},
],
},
html, css, 이미지 파일 등을 js로 변환하기 위한 Loader 설정을 합니다.
즉 HTML, CSS, 이미지나, font 같은 asset 파일들을 웹팩이 인식하고 할 수 있도록 해주는 것을 loader가 맡아서 해주는데 이때 각 객체에는 최소 2개의 속성을 입력해야 합니다.
sass-loader
, css-loader
, styles-loader
순으로 적용됩니다.💡
css-loader
로 css 파일들을 읽은 뒤style-loader
를 통해 css파일들을 style 태그로 만들어 head 태그 안에 넣어주는 방식입니다.
웹팩 실행시 빌드 결과물에 대해 원하는 추가적인 기능을 추가 할 수 있는 옵션입니다.
결과물 사이즈 줄이기, 기타 css, html 파일로 분리 등이 가능합니다.
plugins: [
// 자바스크립트와 관련없는 외부파일들
new HtmlWebpackPlugin({
template: './index.html',
}),
new CopyWebpackPlugin({
patterns: [{ from: 'static' }],
}),
],