[WEB] Webpack, Babel, Polyfill

yayaya_hojinΒ·2024λ…„ 1μ›” 23일

WEB

λͺ©λ‘ 보기
2/16
post-thumbnail

πŸ“¦ Webpack

webpack_img
Webpack은 JS 기반 λͺ¨λ“ˆ λ²ˆλ“€λŸ¬λ‹€.

λͺ¨λ“ˆ λ²ˆλ“€λŸ¬λŠ” HTML, CSS, JS, Image, Font λ“±μ˜ νŒŒμΌμ„ λͺ¨λ“ˆλ‘œ κ°„μ£Όν•˜μ—¬ ν•˜λ‚˜μ˜ 파일둜 ν•©μ³μ£ΌλŠ” 역할을 ν•œλ‹€.

Webpack을 μ‚¬μš©ν•¨μœΌλ‘œμ¨ λ²ˆλ“€λ§ κΈ°λŠ₯으둜 μ˜μ‘΄μ„± μžˆλŠ” νŒŒμΌλ“€μ„ λ¬Άμ–΄ 크기λ₯Ό 쀄이고 νŽ˜μ΄μ§€ λ‘œλ”© 속도λ₯Ό ν–₯μƒμ‹œν‚¨λ‹€.

ν•˜λ‚˜μ˜ νŽ˜μ΄μ§€μ—μ„œ μ—¬λŸ¬κ°œμ˜ JS 파일이 ν•„μš”ν•  λ•Œ λ°˜μ‘μ†λ„κ°€ 느렀짐과 λ™μ‹œμ— λ„€νŠΈμ›Œν¬ 병λͺ©ν˜„상이 μΌμ–΄λ‚˜λŠ” 것을 λ°©μ§€ν•œλ‹€.

λ˜ν•œ νŒŒμΌλ“€μ„ λ¬Άμ–΄μ£ΌκΈ° λ•Œλ¬Έμ— μ½”λ“œ μ••μΆ• 및 μ΅œμ ν™”μ— μš©μ΄ν•˜λ‹€.

πŸ“ Webpack의 ꡬ성 μš”μ†Œ

Entry - λ²ˆλ“€λ§μ„ ν•˜λŠ” μ‹œμž‘μ μ΄λ‹€. μ‹œμž‘μ μ΄ λ˜λŠ” νŒŒμΌμ„ 톡해 μ˜μ‘΄μ„±μ΄ μžˆλŠ” λͺ¨λ“ˆμ„ μ „λΆ€ μ°Ύμ•„λ‚΄ 의쑴 관계λ₯Ό 톡해 dependency graphλ₯Ό μƒμ„±ν•œλ‹€.

Output - μ—”νŠΈλ¦¬λ₯Ό 톡해 λͺ¨λ“  λͺ¨λ“ˆμ„ λ¬Άμ–΄ 결과물을 μƒμ„±ν•œλ‹€.

Loader - μ›ΉνŒ©μ€ λͺ¨λ“  νŒŒμΌμ„ λͺ¨λ“ˆλ‘œ κ°„μ£Όν•˜λŠ”λ° μ΄λ•Œ μ›ΉνŒ©μ΄ JS 밖에 읽지 λͺ»ν•œλ‹€. κ·Έλž˜μ„œ HTML, CSS, Image, font λ“±μ˜ λͺ¨λ“ˆμ„ μ›ΉνŒ©μ΄ 읽을 수 있게 λ³€ν™˜ν•˜λŠ” 역할을 ν•œλ‹€.

Plugin - Output을 톡해 λ‚˜μ˜¨ 결과물에 좔가적인 μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

βš™οΈ Webpack의 λ³€ν™˜ κ³Όμ •

1) Entryλ‘œλΆ€ν„° μ˜μ‘΄μ„±μ΄ μžˆλŠ” λͺ¨λ“  λͺ¨λ“ˆ μ°ΎκΈ°

2) Loaderλ₯Ό 톡해 Webpack이 λͺ¨λ“ˆμ„ 읽을 수 있게 λ³€ν™˜

3) λͺ¨λ“ˆμ„ μ „λΆ€ λ³‘ν•©ν•˜κ³  μ••μΆ•ν•˜μ—¬ Output을 톡해 κ²°κ³Όλ¬Ό 생성

4) μƒμ„±λœ 결과물에 μΆ”κ°€ μž‘μ—…μ„ Plugin을 톡해 처리

πŸ”„οΈ Babel

babel_img
Babel은 JS μ»΄νŒŒμΌλŸ¬λ‹€.

Babel은 λͺ¨λ“  λΈŒλΌμš°μ €κ°€ ES6(ECMAScript 6) ECMAScript ν‘œμ€€ μ΅œμ‹  문법을 μ§€μ›ν•˜μ§€ μ•ŠλŠ” 문제λ₯Ό ν•΄κ²°ν•˜κ³ μž ꡬ 문법인 ES5둜 λ³€ν™˜ν•˜λŠ” 역할을 ν•œλ‹€.

βš™οΈ Babel의 λ™μž‘ κ³Όμ •

1) Parsing - μ†ŒμŠ€ μ½”λ“œλ₯Ό λΆ„μ„ν•˜μ—¬ AST둜 λ³€ν™˜ν•œλ‹€.

2) Transformation - μƒμ„±λœ ASTλ₯Ό λΈŒλΌμš°μ €κ°€ μ§€μ›ν•˜λŠ” ꡬ λ¬Έλ²•μœΌλ‘œ μƒˆλ‘œμš΄ AST둜 λ³€κ²½ν•œλ‹€.

3) Code Generation - μƒˆλ‘œμš΄ ASTλ₯Ό ν†΅ν•˜μ—¬ μƒˆλ‘œμš΄ μ½”λ“œλ₯Ό μƒμ„±ν•œλ‹€.

πŸͺ„ Polyfill

polyfill_img
Polyfill은 Babel을 톡해 ES6 문법을 ES5둜 λ³€ν™˜μ„ ν•  λ•Œ ES6 문법 쀑에 ES5둜 λŒ€μ²΄κ°€ λΆˆκ°€λŠ₯ν•œ 경우 μ‚¬μš© κ°€λŠ₯ν•œ 객체둜 λ³€ν™˜μ„ ν•œλ‹€.

즉, λΈŒλΌμš°μ €μ—μ„œ μ§€μ›ν•˜μ§€ μ•ŠλŠ” κΈ°λŠ₯듀에 λŒ€ν•œ `ν˜Έν™˜μ„± μž‘μ—…`을 μ±„μš°λŠ” 역할을 ν•œλ‹€.

0개의 λŒ“κΈ€