- 번들링이란 하드웨어 또는 소프트웨어와 같은 다양한 항목을 패키지로 함께 묶는 것을 의미한다.
- 웹팩은 기본적으로 브라우징을 하는데 필요한 파일(JS, CSS, 옵션에 따라 HTML ...)을 하나로 묶는 기술이므로 번들링 도구라고 부른다.
- 여러 번들링 도구 가운데 웹팩은 속도가 느린 편에 속한다. 하지만 가장 많은 기능을 가지고 있고, 가장 잘 알려진 기술이기 때문에 문제 해결이 상대적으로 쉽다는 장점이 있다. 속도가 빠른 번들링 도구들이 있지만 기능이 제한적이기 때문에 정해진 환경에서 주로 사용한다. 예를 들어 주로 vite('빗' 이라고 읽는다.)는 vueJS와 laravel에서 사용하며, turbopack은 레일즈 프레임워크에서 도입해서 사용하고 있다. 번들링 도구는 유명한 기술들을 대부분 지원하기 때문에 다른 번들링 도구로 대체할 수 있는 경우가 많다.
webpack.config.js
const config = {
entry: "./src_study/index.js",
output: {
path: path.resolve(__dirname, "dist"),
},
// 나머지 설정들
};
- 웹팩으로 번들링할 대상 파일을 지정한다.
entry: "./src_study/index.js",
- 위의 경우에는
webpack.config.js
파일을 기준으로 상대경로인./src_study/index.js
파일을 번들링하겠다는 의미이다. yarn run build
명령을 CLI에 입력하면, 프로젝트 루트 디렉토리에dist
폴더가 생기고main.js
란 파일이 생성되는 것을 확인할 수 있다.dist.main.js
내부를 보면,src_study/index.js
와 동일한console.log("Hello World!");
란 코드가 들어 있는 것을 확인할 수 있다.
console.log("CSS를 자바스크립트로 불러와 보자.");
./src_study/css.js
라는 파일을 만들고 위의 코드를 넣어 보자.
entry: [
"./src_study/index.js",
"./src_study/css.js"
],
entry
에 배열로 파일 경로를 나열하면 나열한 파일을 하나로 합쳐준다.yarn run build
로 빌드된 파일인dist/main.js
를 보면console.log("Hello World!"),console.log("CSS를 자바스크립트로 불러와 보자.");
으로./src_study/index.js
의 코드와./src_study/css.js
의 코드가 들어 있는 것을 확인할 수 있다.
entry: {
'index' : [
"./src_study/index.js",
"./src_study/css.js"
],
}
entry
에 리터럴 오브젝트를 할당하고, 할당한 리터럴 오브젝트 안에 생성될 파일명을 키로 하고(여기서는index
), 번들링 대상 파일을 키에 대응하는 벨류로 할당한다. (여기서는["./src_study/index.js", "./src_study/css.js"]
) 이때, 벨류를 배열이 아닌 문자열의 경로를 할당하면 여러 파일이 아닌 하나의 파일만 번들링 대상으로 한다.yarn run build
라는 명령어를 사용하면,dist/index.js
라는 파일이 만들어지며, 배열 안에 나열한 두 파일을 합친 코드를 갖는다.
entry: {
index: {
import: [
"./src_study/index.js",
"./src_study/css.js"
],
filename: 'pages/specific.js',
},
}
filename
속성을 정의하면 키로 이름을 지정하는 방식인index
보다 우선되어 적용이 되며, 키로 이름을 지정할 때는 파일명만 지정할 수 있었지만,filename
을 사용할 경우 파일 경로를 세부적으로 설정할 수 있다. 이때 파일 경로는output
에 지정한 폴더가 기준이 되므로dist/pages/specific.js
경로에 파일이 생성된다.
string [string] object = { <key> string | [string] | object = { import string | [string], dependOn string | [string], filename string, layer string }} (function() => string | [string] | object = { <key> string | [string] } | object = { import string | [string], dependOn string | [string], filename string })
string
: 파일 경로를 문자열로 입력한다. 대상 경로의 파일은 웹팩에 의해 변환된다.[string]
: 배열에 경로 문자열을 나열하여 나열된 경로의 파일을 묶어 하나의 파일로 번들링한다.object = { <key> string | [string] | object = { import string | [string], dependOn string | [string], filename string, layer string }}
: 오브젝트의 키(<key>
)로는string
문자열의 파일 경로,[string]
파일 경로를 문자열로 나열한 배열,object = { import string | [string], dependOn string | [string], filename string, layer string }
오브젝트를 할당가능하다. 내부 오브젝트 안의import
키에는string
문자열의 파일 경로,[string]
파일 경로를 문자열로 나열한 배열을 할당할 수 있으며, 내부 오브젝트 안의dependOn
키에는 이 옵션을 가진 대상을 번들링 하기 전에 지정한 이름의 파일이 번들링되어 만들어지는지 확인하며string
문자열로 의존하는 파일 경로 또는[string]
의존하는 파일 경로 리스트를 배열으로 나열할 수 있다.filename
키에는 번들링되는 파일 이름을 지정하며entry
오브젝트의 키로 파일이름이 지정되는 것을 무시하고 적용된다. 여러 파일을 하나로 합치는 번들링 파일을 만들 경로를 지정하기 때문에 하나의 경로만 있으면 되므로 배열 방식으로 나열하지 않고string
으로 생성할 경로를 문자열로 지정한다.entry
오브젝트의 키로 파일이름을 정할 때는output
에 정한 경로에 파일이 생성되는 반면filename
을 지정하면 좀 더 다양한 경로에 파일을 생성할 수 있다는 장점이 있다.(function() => string | [string] | object = { <key> string | [string] } | object = { import string | [string], dependOn string | [string], filename string }
: 함수의 리턴값으로 앞서 지정한 방식과 동일한 방식으로entry
를 설정할 수 있다.