일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 2018 KAKAO BLIND RECRUITMENT
- 소수 체크
- 주식 가격
- 프로그래머스
- javascript
- 깊이 우선 탐색
- colorSyntax
- 위클리 챌린지
- Hasing
- 10162
- 1620
- 구간 합 구하기 4
- 옵셔널 체이닝 연산자
- codeSyntaxHighlight
- 이분탐색
- 18111
- mermaid js
- js
- n^2 배열 자르기
- 없는 숫자 더하기
- BOJ
- 정수 삼각형
- 4796
- 브루트포스 알고리즘
- 숫자 문자열과 영단어
- 5525
- 다이내믹 프로그래밍
- Git Convention
- react
- C++
- Today
- Total
개발하는 kim-hasa
[Webpack][Babel] Webpack 과 Babel 본문
웹 개발을 하던 중 , Webpack 과 Babel 에 대해 많이 듣게 되었는데 , 매일 듣기만 하고 정확히 무슨 일을 하는지 몰라서 따로 한번 정리해보려고 게시물을 작성했다.
왜 사용하는가 ?
https://kangax.github.io/compat-table/es6/
크롬, 사파리 등 에버그린 브라우저(웹 표준을 위해 지속적으로 자동 업데이트를 지원하는 모던 브라우저)는 대부분의 ES6 사양을 지원한다. 하지만 IE 11은 거의 ES6를 지원하지 않는다. 또한 , ES6가 새롭게 도입될 때마다 브라우저 지원율이 각각 다를 수밖에 없다. 그래서, 최신 사양으로 작성된 코드를 구형 브라우저에서 동작시키기 위한 개발 환경을 구축하고 , 대부분의 프로젝트가 모듈을 사용하므로 모듈 로더가 필요하다. 물론 ES6 모듈이 존재하기는 하지만 , 아직까지는 별도의 모듈 번들러인 Webpack을 사용하는게 일반적이다.
Babel
대표적인 트랜스파일러로 , ES6 의 최신 버전으로 구현된 소스코드를 IE 같은 구형 브라우저에서 동작하는 사양의 소스코드로 변환해준다 . 즉 , 최신사양으로 작성 해도 지원하지 않는 구형 브라우저에서 작동한다는 말이다.
Babel 설치
// package.json 생성
npm init -y
// babel-core, babel-cli 설치
npm install --save-dev @babel/core @babel/cli
// babel/preset-env 설치
npm install --save-dev @babel/preset-env
// preset-env를 설치해야 babel이 사용가능하다 .
// preset-env가 필요한 플러그인들을 프로젝트 지원 환경에 맞춰 동적으로 결정해줌.
이렇게 설치하게 되고 , package.json을 보게 되면
{
"name": "webpack-babel",
"version": "1.0.0",
"devDependencies": {
"@babel/cli": "^7.17.6",
"@babel/core": "^7.17.5",
"@babel/preset-env": "^7.16.11"
}
}
이렇게 완성이 되어있다. 그리고 프로젝트의 루트 폴더에 babel.config.json 설정 파일을 만든다.
{
"presets": ["@babel/preset-env"]
}
트랜스 파일링
소스 코드를 트랜스파일링 할 때 , Babel Cli 명령어를 사용해도 되지만 트랜스파일링 때마다 입력하는 것은 비효율적이므로 , npm scripts에 명령어를 등록하는 것이 합리적이다.
{
"name": "webpack-babel",
"version": "1.0.0",
"scripts": {
"build": "babel src/js -w -d dist/js"
},
"devDependencies": {
"@babel/cli": "^7.17.6",
"@babel/core": "^7.17.5",
"@babel/preset-env": "^7.16.11"
}
}
npm script의 build시 src/js 폴더의 모든 파일을 트랜스 파일링 한 후 , 그 결과물을 dist.js의 저장한다는 뜻이다.
- -w : 타깃 폴더의 모든 자바스크립트 파일들의 변경을 감지하여 자동으로 트랜스파일링 한다.
- -d : 트랜스 파일링된 결과물이 저장될 폴더를 지정한다 . 폴더가 없다면 자동으로 생성한다.
Webpack
Webpack은 의존 관계에 있는 JS , CSS , img 등의 리소스를 하나(또는 여러개)의 파일로 번들링하는 모듈 번들러이다.
- 자바스크립트 파일을 하나로 번들링해서 HTML 파일에서 script 태그로 여러개를 로드해야하는 번거로움도 없어진다.
- 많은 파일들을 다운받으면 네트워크 부하가 커지고 느려지고 , 충돌 가능성이 있다.
즉 , 번들러를 사용하면 여러개의 파일을 하나로 묶어줘서 네트워크 부담을 줄이고 , 빠르게 서비스 할 수 있다는 장점이 있다.
Webpack 설치
npm install --save-dev webpack webpack-cli
@babel-loader 설치
Webpack이 모듈을 번들링할 때 , Babel을 사용해서 트랜스파일링 하도록 설치한다.
npm install --save-dev babel-loader
이후 완성된 package.json은
{
"name": "webpack-babel",
"version": "1.0.0",
"scripts": {
"build": "babel src/js -w -d dist/js"
},
"devDependencies": {
"@babel/cli": "^7.17.6",
"@babel/core": "^7.17.5",
"@babel/preset-env": "^7.16.11",
"babel-loader": "^8.2.3",
"webpack": "^5.69.1",
"webpack-cli": "^4.9.2"
}
}
webpack.config.js
webpack.config.js은 Webpack이 실행될 때 참조하는 설정 파일이다. 프로젝트 루트 폴더에 만든다.
const path = require("path");
module.exports = {
entry: "./src/js/main.js",
// entry file
output: {
path: path.resolve(__dirname, "dist/js"),
filename: "bundle.js",
},
// 번들링된 js 파일의 이름과 저장될 경로 지정
module: {
rules: [
{
test: /\.jsx?/,
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"],
},
},
],
},
devtool: "source-map",
mode: "development",
};
이렇게 세팅하고 webpack을 실행하게 되면 , babel이 트랜스파일링을 , webpack이 번들링을 수행하게 해준다. dist/js 폴더 안에 bundle.js가 생성되는데, 이 파일이 번들링 된 결과물이다.
'study' 카테고리의 다른 글
옵셔널 체이닝 연산자 / null 병합 연산자 (0) | 2022.03.06 |
---|---|
변수 Hoisting 과 var , let , const 키워드 (0) | 2022.03.04 |
[React] Toast UI Editor , Viewer , 이미지 첨부 및 Plugin (0) | 2022.02.23 |
[Git] 협업을 위한 Git Commit Convention (0) | 2022.02.22 |
[VS Code] 통일된 코드를 위한 , Prettier (0) | 2022.02.22 |