SlideShare a Scribd company logo
1 of 15
WEBPACK / BABEL
2021.01.25
작성자 : 배창현
목차
 Webpack
 Babel
WEBPACK
 Webpack 이란?
Webpack 은 최신 javascript 응용 프로그램을 위한 정적 모듈 번들러(module bundler)
* module 이란 프로그램을 구성하는 일부요소 또는 기능별로 나뉘어지는 프로그램
* bundler 는 지정한 단위로 파일들을 하나로 만들어 주는 역할을 수행
WEBPACK
Bundle your scripts, images ..
의존 관계에 있는 모듈들을 하나의
파일(자바스크립트 파일)로 번들링
 Webpack 을 사용하는 이유?
다수의 자바스크립트 파일을 하나의 파일로 번들링하므로 html 파일에서 script 태그로 다수의 자바스크립트 파일
을 로드해야하는 번거로움이 사라짐(HTTP 요청 횟수 감소)
-> overhead 감소
웹팩은 플러그인(plugin) 및 로더(loader) 등과 함께 사용하면 이미지, 글꼴, SASS, CSS 와 같은 종속성 및 자산을 관
리하는데 훌륭한 개발경험을 제공합니다.(tree shaking 및 code splitting 등 지원)
* tree shaking 이란 데드코드(dead code) 를 제거하는 것을 의미(사용하지 않는 일부 코드를 제거 -> 번들링 크기와 로드 시간이 줄
어듬)
* code splitting 이란 코드를 다양한 번들로 나누며, 해당 번들은 필요할 때 동적으로 로드괴거나 병렬로 로드가 가능 -> 로드 시간
개선
WEBPACK
WEBPACK 설치
웹팩은 각 프로젝트 또는 전역으로 설치가 가능
npm i -g webpack webpack-cli
npm i –D webpack webpack-cli
 Webpack 구성 및 핵심 개념
- Entry
- Output
- Loaders
- Plugins
- Mode
- Browser Compatibility
* 웹팩을 사용할 때 반드시 설정파일이 필요하지는 않지만, 대부분의 경우에는 설정파일을 사용
* 설정파일은 디폴트로 webpack.config.js 를 바라본다.(경로는 프로젝트 루트 폴더)
WEBPACK
// webpack.config.js
const path = require('path’);
module.exports = {
entry: './src/index.js’,
output: {
filename: 'bundle.js’,
path: path.resolve(__dirname, 'dist’),
},
};
 Webpack 구성 및 핵심 개념
- Entry : 파일을 읽어들이기 위한 시작점, 번들링 시작점, 의존성 그래프의 시작점
- Output : 번들링 결과물 경로 및 파일명 설정
- Loaders : 웹팩은 오직 자바스크립트, JSON 만 해석이 가능하기 때문에 CSS, 이미지, 폰트 등을 웹팩이 해석 할 수
있는 자바스크리틉로 변경해야 합니다. loader 는 이러한 역할을 수행
- Plugins : 웹팩의 기본적인 동작에 추가적인 기능을 제공(번들링한 결과물에 추가적인 작업을 제공)
- Mode : 웹팩4 에서 추가된 옵션이며, production / development / none 3가지가 존재하며 각 옵션마다 최적화 옵
션을 자동으로 설정
- Browser Compatibility : 웹팩은 ES5를 준수하는 모든 브라우저를 지원(IE8 이하 미지원) -> 이전 브라우저를 지원
하려면 polyfill 을 해야함
WEBPACK
 Webpack 구성 및 핵심 개념
WEBPACK
const CleanWebpackPlugin = require("clean-webpack-plugin")
module.exports = {
entry: "./script.js",
output: {
path: __dirname,
filename: "build.js",
},
module: {
rules: [
{
test: /.css$/,
use: ["style-loader", "css-loader"],
},
],
},
plugins: [new CleanWebpackPlugin("build.js")],
}
"scripts": {
"build": "webpack"
"watch": "webpack --watch"
}
npm run build
웹팩 실행(package.json)
참조 : https://flaviocopes.com/webpack/
웹팩은 개발 편의기능을 제공해주고 있다.
--watch
webpack dev server -> 웹팩에서 제공하는
개발서버를 사용하면 live reloading 통해,
개발속도 및 반영되는 부분을 바로 확인이 가능
source map -> 웹팩은 코드를 번들로 제공하므로,
오류를 발생시킨 원본 파일에 대한 참조가 필요
 Webpack5
- 웹팩5 는 최소 Node.js 10.13.0 이 필요
- tree shaking 개선(번들 크기 개선)
- 영구 캐싱으로 빠른 빌드
- 장기 캐싱으로 로딩 시간 단축
WEBPACK
BABEL
 Babel 이란?
Babel 은 최신 javascript 문법(ES6+ 이상)을 이전 javascript 문법으로 변환해주는 컴파일러 또는 트랜스파일러다.
굳이 최신문법을 왜?
크로스 브라우징이라는 개념을 알면 바벨은 정말 좋은 도구임을 알게 된다.
브라우저 및 플랫폼마다 모든 javascript 문법이 잘 동작하면 문제가 없다. 하지만 모든 브라우저 및 플랫폼에서 동작
하지 않고 일부 최신버전에서만 동작하는 경우도 발생을 한다.
IE11 에서 동작해야할 자바스크립트 코드를 ES2015 로 작성한다면? 사실상 동작을 보장할수가 없다.
이런 측면에서 바벨은 최대한 모든 실행환경(브라우저, 플랫폼)에서 자바스크립트가 실행이 가능하도록 보장해준다.
바벨은 자바스크립트 관련 컴파일만 지원하기 때문에, 최신 브라우저에서 지원하는 BOM 구문은 다른방식으로
polyfill 해서 사용해야한다.(classList 같은것들..)
BABEL
 Babel 이란?
바벨은 3단계로 빌드를 진행
- 파싱(parsing)
- 변환(transforming)
- 출력(printing)
바벨은 파싱 / 출력을 담당하고 변환은 플러그인을 사용하여 진행한다.
-> @babel/core 자체는 해석을 못한다는 의미 -> presets / plugins 에게 변환을 위임
presets = plugins 을 모아둔 형식
BABEL
.babelrc
 Babel 구성과 설치
npm i –D @babel/core
npm i –D @babel/preset-env
npm i –D @babel/cli
프로젝트 루트 폴더에 .babelrc 설정파일 생성
만약에, 웹팩과 함께 사용할려면?
npm i –D babel-loader
모듈 설치 후 webpack.config.js 에 loader 설정을 추가해 줘야한다.
BABEL
 Babel polyfill
폴리필(polyfill)?
브라우저에서 지원하지 않는 코드를 사용가능한 코드 조각이나 플러그인(추가기능)을 의미
바벨은 ES6+ 에서 지원하는 문법을 이전 버전 문법으로 변환해주지만, ES5 에 존재하지 않는 메서드들 및 속성은 자
동으로 추가해주지 않는다.
-> 이러한 부분을 해결하기 위해서 polyfill 을 사용(Map, Set, Promise 등을 사용가능한 객체로 생성해줌)
@babel/polyfill 모듈을 사용중단(deprecated) 되었으므로, 다른방식으로 사용하는게 좋다.
(해당 모듈을 가져오면 모든 모듈내의 모든 폴리필을 추가하면서 번들파일용량이 커진다)
core-js / regenerator-runtime 을 직접 사용하는 방식을 제안하고 있다.
@babel/preset-env 에서 useBuiltIns 옵션을 함께 사용하여 적용이 가능하다.
참고 : https://babeljs.io/docs/en/babel-preset-env
BABEL

More Related Content

What's hot

Clojure/Chapter3
Clojure/Chapter3Clojure/Chapter3
Clojure/Chapter3destinycs
 
JSP 프로그래밍 #02 서블릿과 JSP 시작하기
JSP 프로그래밍 #02 서블릿과 JSP 시작하기JSP 프로그래밍 #02 서블릿과 JSP 시작하기
JSP 프로그래밍 #02 서블릿과 JSP 시작하기Myungjin Lee
 
클래스의 추가 지식
클래스의 추가 지식클래스의 추가 지식
클래스의 추가 지식. Ruvendix
 
Ngui3 5 5 localization
Ngui3 5 5 localizationNgui3 5 5 localization
Ngui3 5 5 localizationJe Lyoung Kim
 
Google coding guide
Google coding guideGoogle coding guide
Google coding guide. Ruvendix
 
Javascript 를 perl에서 mini-language 로 사용하기
Javascript 를 perl에서 mini-language 로 사용하기Javascript 를 perl에서 mini-language 로 사용하기
Javascript 를 perl에서 mini-language 로 사용하기HyunSeung Kim
 
Promise 패턴 공부
Promise 패턴 공부Promise 패턴 공부
Promise 패턴 공부HongGun Yoo
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3J B
 
Jsp convert to Servlet
Jsp convert to ServletJsp convert to Servlet
Jsp convert to ServletJU Chae
 
JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍Myungjin Lee
 
[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기
[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기
[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기우영 주
 
JavaScript Promises
JavaScript PromisesJavaScript Promises
JavaScript Promises우영 주
 
막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)연웅 조
 
20 handler and_async_task
20 handler and_async_task20 handler and_async_task
20 handler and_async_task운용 최
 
연산자 오버로딩
연산자 오버로딩연산자 오버로딩
연산자 오버로딩. Ruvendix
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XpressEngine
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatisSomang Jeong
 

What's hot (20)

Servlet3
Servlet3Servlet3
Servlet3
 
Clojure/Chapter3
Clojure/Chapter3Clojure/Chapter3
Clojure/Chapter3
 
Mongodb tip42 50
Mongodb tip42 50Mongodb tip42 50
Mongodb tip42 50
 
JSP 프로그래밍 #02 서블릿과 JSP 시작하기
JSP 프로그래밍 #02 서블릿과 JSP 시작하기JSP 프로그래밍 #02 서블릿과 JSP 시작하기
JSP 프로그래밍 #02 서블릿과 JSP 시작하기
 
클래스의 추가 지식
클래스의 추가 지식클래스의 추가 지식
클래스의 추가 지식
 
Ngui3 5 5 localization
Ngui3 5 5 localizationNgui3 5 5 localization
Ngui3 5 5 localization
 
Google coding guide
Google coding guideGoogle coding guide
Google coding guide
 
Javascript 를 perl에서 mini-language 로 사용하기
Javascript 를 perl에서 mini-language 로 사용하기Javascript 를 perl에서 mini-language 로 사용하기
Javascript 를 perl에서 mini-language 로 사용하기
 
Promise 패턴 공부
Promise 패턴 공부Promise 패턴 공부
Promise 패턴 공부
 
HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3HeadFisrt Servlet&JSP Chapter 3
HeadFisrt Servlet&JSP Chapter 3
 
Jsp convert to Servlet
Jsp convert to ServletJsp convert to Servlet
Jsp convert to Servlet
 
JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍
 
Flux 예제 분석 2
Flux 예제 분석 2Flux 예제 분석 2
Flux 예제 분석 2
 
[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기
[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기
[Toolcon2014] WebStorm에서 자바스크립트 리팩토링하기
 
JavaScript Promises
JavaScript PromisesJavaScript Promises
JavaScript Promises
 
막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)
 
20 handler and_async_task
20 handler and_async_task20 handler and_async_task
20 handler and_async_task
 
연산자 오버로딩
연산자 오버로딩연산자 오버로딩
연산자 오버로딩
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatis
 

Similar to Webpack&babel

Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodedpTablo
 
2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드Tai Hoon KIM
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)SangIn Choung
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyondJae Sung Park
 
Bootstrap에 대해서 정기철
Bootstrap에 대해서 정기철Bootstrap에 대해서 정기철
Bootstrap에 대해서 정기철Kichul Jung
 
LucideWorks Banana 소개
LucideWorks Banana 소개 LucideWorks Banana 소개
LucideWorks Banana 소개 SuHyun Jeon
 
Backend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsBackend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsKyunghun Jeon
 
모듈시스템과 webpack
모듈시스템과 webpack모듈시스템과 webpack
모듈시스템과 webpackDataUs
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page ApplicationSangmin Yoon
 
최근 Javascript framework 조사
최근 Javascript framework 조사최근 Javascript framework 조사
최근 Javascript framework 조사Kichul Jung
 
Web assembly 맛보기
Web assembly 맛보기Web assembly 맛보기
Web assembly 맛보기GyeongSeok Seo
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문종훈 박
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core Ji-Woong Choi
 
웹캣소개서 (스마트교육연구소)
웹캣소개서 (스마트교육연구소)웹캣소개서 (스마트교육연구소)
웹캣소개서 (스마트교육연구소)tekville2
 
Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트Dong-Jin Park
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...JinKwon Lee
 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rdPark Jonggun
 

Similar to Webpack&babel (20)

Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCodeSpring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
 
2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
Bootstrap에 대해서 정기철
Bootstrap에 대해서 정기철Bootstrap에 대해서 정기철
Bootstrap에 대해서 정기철
 
LucideWorks Banana 소개
LucideWorks Banana 소개 LucideWorks Banana 소개
LucideWorks Banana 소개
 
Backend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build toolsBackend Master | 3.1.1 Build - JS build tools
Backend Master | 3.1.1 Build - JS build tools
 
모듈시스템과 webpack
모듈시스템과 webpack모듈시스템과 webpack
모듈시스템과 webpack
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 
최근 Javascript framework 조사
최근 Javascript framework 조사최근 Javascript framework 조사
최근 Javascript framework 조사
 
Web assembly 맛보기
Web assembly 맛보기Web assembly 맛보기
Web assembly 맛보기
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
 
웹캣소개서 (스마트교육연구소)
웹캣소개서 (스마트교육연구소)웹캣소개서 (스마트교육연구소)
웹캣소개서 (스마트교육연구소)
 
Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트
 
Es6 module
Es6 moduleEs6 module
Es6 module
 
요즘웹개발
요즘웹개발요즘웹개발
요즘웹개발
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd
 

More from ChangHyeon Bae

호이스팅, 클로저, IIFE
호이스팅, 클로저, IIFE호이스팅, 클로저, IIFE
호이스팅, 클로저, IIFEChangHyeon Bae
 
JavaScript 실행컨텍스트와 클로저
JavaScript 실행컨텍스트와 클로저JavaScript 실행컨텍스트와 클로저
JavaScript 실행컨텍스트와 클로저ChangHyeon Bae
 
WAS와 웹서버 간단 정리
WAS와 웹서버 간단 정리WAS와 웹서버 간단 정리
WAS와 웹서버 간단 정리ChangHyeon Bae
 
Angular 살짝 해보고 발표.
Angular 살짝 해보고 발표.Angular 살짝 해보고 발표.
Angular 살짝 해보고 발표.ChangHyeon Bae
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingChangHyeon Bae
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentChangHyeon Bae
 
DI - Dependency Injection
DI - Dependency InjectionDI - Dependency Injection
DI - Dependency InjectionChangHyeon Bae
 
CDN - Content Delivery Network
CDN - Content Delivery NetworkCDN - Content Delivery Network
CDN - Content Delivery NetworkChangHyeon Bae
 

More from ChangHyeon Bae (14)

호이스팅, 클로저, IIFE
호이스팅, 클로저, IIFE호이스팅, 클로저, IIFE
호이스팅, 클로저, IIFE
 
ES6-02
ES6-02ES6-02
ES6-02
 
javascript03
javascript03javascript03
javascript03
 
javascript02
javascript02javascript02
javascript02
 
Java memory
Java memoryJava memory
Java memory
 
JavaScript 실행컨텍스트와 클로저
JavaScript 실행컨텍스트와 클로저JavaScript 실행컨텍스트와 클로저
JavaScript 실행컨텍스트와 클로저
 
WAS와 웹서버 간단 정리
WAS와 웹서버 간단 정리WAS와 웹서버 간단 정리
WAS와 웹서버 간단 정리
 
REST Concept
REST ConceptREST Concept
REST Concept
 
Srping data rest
Srping data restSrping data rest
Srping data rest
 
Angular 살짝 해보고 발표.
Angular 살짝 해보고 발표.Angular 살짝 해보고 발표.
Angular 살짝 해보고 발표.
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted Programing
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
DI - Dependency Injection
DI - Dependency InjectionDI - Dependency Injection
DI - Dependency Injection
 
CDN - Content Delivery Network
CDN - Content Delivery NetworkCDN - Content Delivery Network
CDN - Content Delivery Network
 

Webpack&babel

  • 4.  Webpack 이란? Webpack 은 최신 javascript 응용 프로그램을 위한 정적 모듈 번들러(module bundler) * module 이란 프로그램을 구성하는 일부요소 또는 기능별로 나뉘어지는 프로그램 * bundler 는 지정한 단위로 파일들을 하나로 만들어 주는 역할을 수행 WEBPACK Bundle your scripts, images .. 의존 관계에 있는 모듈들을 하나의 파일(자바스크립트 파일)로 번들링
  • 5.  Webpack 을 사용하는 이유? 다수의 자바스크립트 파일을 하나의 파일로 번들링하므로 html 파일에서 script 태그로 다수의 자바스크립트 파일 을 로드해야하는 번거로움이 사라짐(HTTP 요청 횟수 감소) -> overhead 감소 웹팩은 플러그인(plugin) 및 로더(loader) 등과 함께 사용하면 이미지, 글꼴, SASS, CSS 와 같은 종속성 및 자산을 관 리하는데 훌륭한 개발경험을 제공합니다.(tree shaking 및 code splitting 등 지원) * tree shaking 이란 데드코드(dead code) 를 제거하는 것을 의미(사용하지 않는 일부 코드를 제거 -> 번들링 크기와 로드 시간이 줄 어듬) * code splitting 이란 코드를 다양한 번들로 나누며, 해당 번들은 필요할 때 동적으로 로드괴거나 병렬로 로드가 가능 -> 로드 시간 개선 WEBPACK
  • 6. WEBPACK 설치 웹팩은 각 프로젝트 또는 전역으로 설치가 가능 npm i -g webpack webpack-cli npm i –D webpack webpack-cli
  • 7.  Webpack 구성 및 핵심 개념 - Entry - Output - Loaders - Plugins - Mode - Browser Compatibility * 웹팩을 사용할 때 반드시 설정파일이 필요하지는 않지만, 대부분의 경우에는 설정파일을 사용 * 설정파일은 디폴트로 webpack.config.js 를 바라본다.(경로는 프로젝트 루트 폴더) WEBPACK // webpack.config.js const path = require('path’); module.exports = { entry: './src/index.js’, output: { filename: 'bundle.js’, path: path.resolve(__dirname, 'dist’), }, };
  • 8.  Webpack 구성 및 핵심 개념 - Entry : 파일을 읽어들이기 위한 시작점, 번들링 시작점, 의존성 그래프의 시작점 - Output : 번들링 결과물 경로 및 파일명 설정 - Loaders : 웹팩은 오직 자바스크립트, JSON 만 해석이 가능하기 때문에 CSS, 이미지, 폰트 등을 웹팩이 해석 할 수 있는 자바스크리틉로 변경해야 합니다. loader 는 이러한 역할을 수행 - Plugins : 웹팩의 기본적인 동작에 추가적인 기능을 제공(번들링한 결과물에 추가적인 작업을 제공) - Mode : 웹팩4 에서 추가된 옵션이며, production / development / none 3가지가 존재하며 각 옵션마다 최적화 옵 션을 자동으로 설정 - Browser Compatibility : 웹팩은 ES5를 준수하는 모든 브라우저를 지원(IE8 이하 미지원) -> 이전 브라우저를 지원 하려면 polyfill 을 해야함 WEBPACK
  • 9.  Webpack 구성 및 핵심 개념 WEBPACK const CleanWebpackPlugin = require("clean-webpack-plugin") module.exports = { entry: "./script.js", output: { path: __dirname, filename: "build.js", }, module: { rules: [ { test: /.css$/, use: ["style-loader", "css-loader"], }, ], }, plugins: [new CleanWebpackPlugin("build.js")], } "scripts": { "build": "webpack" "watch": "webpack --watch" } npm run build 웹팩 실행(package.json) 참조 : https://flaviocopes.com/webpack/ 웹팩은 개발 편의기능을 제공해주고 있다. --watch webpack dev server -> 웹팩에서 제공하는 개발서버를 사용하면 live reloading 통해, 개발속도 및 반영되는 부분을 바로 확인이 가능 source map -> 웹팩은 코드를 번들로 제공하므로, 오류를 발생시킨 원본 파일에 대한 참조가 필요
  • 10.  Webpack5 - 웹팩5 는 최소 Node.js 10.13.0 이 필요 - tree shaking 개선(번들 크기 개선) - 영구 캐싱으로 빠른 빌드 - 장기 캐싱으로 로딩 시간 단축 WEBPACK
  • 11. BABEL
  • 12.  Babel 이란? Babel 은 최신 javascript 문법(ES6+ 이상)을 이전 javascript 문법으로 변환해주는 컴파일러 또는 트랜스파일러다. 굳이 최신문법을 왜? 크로스 브라우징이라는 개념을 알면 바벨은 정말 좋은 도구임을 알게 된다. 브라우저 및 플랫폼마다 모든 javascript 문법이 잘 동작하면 문제가 없다. 하지만 모든 브라우저 및 플랫폼에서 동작 하지 않고 일부 최신버전에서만 동작하는 경우도 발생을 한다. IE11 에서 동작해야할 자바스크립트 코드를 ES2015 로 작성한다면? 사실상 동작을 보장할수가 없다. 이런 측면에서 바벨은 최대한 모든 실행환경(브라우저, 플랫폼)에서 자바스크립트가 실행이 가능하도록 보장해준다. 바벨은 자바스크립트 관련 컴파일만 지원하기 때문에, 최신 브라우저에서 지원하는 BOM 구문은 다른방식으로 polyfill 해서 사용해야한다.(classList 같은것들..) BABEL
  • 13.  Babel 이란? 바벨은 3단계로 빌드를 진행 - 파싱(parsing) - 변환(transforming) - 출력(printing) 바벨은 파싱 / 출력을 담당하고 변환은 플러그인을 사용하여 진행한다. -> @babel/core 자체는 해석을 못한다는 의미 -> presets / plugins 에게 변환을 위임 presets = plugins 을 모아둔 형식 BABEL .babelrc
  • 14.  Babel 구성과 설치 npm i –D @babel/core npm i –D @babel/preset-env npm i –D @babel/cli 프로젝트 루트 폴더에 .babelrc 설정파일 생성 만약에, 웹팩과 함께 사용할려면? npm i –D babel-loader 모듈 설치 후 webpack.config.js 에 loader 설정을 추가해 줘야한다. BABEL
  • 15.  Babel polyfill 폴리필(polyfill)? 브라우저에서 지원하지 않는 코드를 사용가능한 코드 조각이나 플러그인(추가기능)을 의미 바벨은 ES6+ 에서 지원하는 문법을 이전 버전 문법으로 변환해주지만, ES5 에 존재하지 않는 메서드들 및 속성은 자 동으로 추가해주지 않는다. -> 이러한 부분을 해결하기 위해서 polyfill 을 사용(Map, Set, Promise 등을 사용가능한 객체로 생성해줌) @babel/polyfill 모듈을 사용중단(deprecated) 되었으므로, 다른방식으로 사용하는게 좋다. (해당 모듈을 가져오면 모든 모듈내의 모든 폴리필을 추가하면서 번들파일용량이 커진다) core-js / regenerator-runtime 을 직접 사용하는 방식을 제안하고 있다. @babel/preset-env 에서 useBuiltIns 옵션을 함께 사용하여 적용이 가능하다. 참고 : https://babeljs.io/docs/en/babel-preset-env BABEL