JavaScript - The Complete Guide 2022

Section 23: Browser Support - Ensure Your Scripts Work In All Browsers

olivia_yj 2022. 11. 4. 20:00

The goals

๐Ÿ’ช๐ŸปWhat is "Browser Support" About?

โœŒ๐ŸปDetermining Required Support

๐Ÿ‘๐ŸปFinding Out Which Feature Works Where

๐Ÿ‘Š๐ŸปPolyfills

๐ŸคŸ๐ŸปTranspilation

Babel

 

- ES6/7 ์ฝ”๋“œ๋ฅผ ES5 ์ฝ”๋“œ๋กœ Transpiling ํ•ด์ฃผ๋Š” Transpiler

- ES5 ์ด์ „๊นŒ์ง€๋Š” ํ‘œ์ค€์ด ์—†์—ˆ๊ณ , jquery ๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ์„ ํ•ด๊ฒฐํ•ด์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š” ์—†์—ˆ์Œ

- Babel ์€ ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๊ฐ€ ์ˆ˜์ •๋˜์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์œผ๋กœ ์ƒˆ๋กœ์šด ์ปดํŒŒ์ผ์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•จ 

- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ŠคํŽ™์œผ๋กœ ์•„์ง ํ™•์ •๋˜์ง€ ์•Š์€ Proposal ์ŠคํŽ™์ด 5๊ฐœ์˜ Stage ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์กด์žฌํ•˜๋Š”๋ฐ, Babel ์€ ๊ฐ๊ฐ์˜ Stage ์— ๋Œ€ํ•ด Preset ์„ ์ œ๊ณตํ•จ

 

์•„๋ž˜์˜ Arrow Function (=>) ์€ ES6 ์—์„œ ์ถ”๊ฐ€๋œ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ, ํ™”์‚ดํ‘œ ํ‘œํ˜„์‹ (=>) ์€ Javascript ์˜ Syntax ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— Javscript ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ๋กœ ์žฌ ์ž‘์„ฑ ๋˜์–ด ์ƒˆ๋กœ ์ปดํŒŒ์ผ ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

Babel ์ „

function addAdd(){
   return Array.from(arguments).map(a => a + 2);
}

Babel ํ›„

function addAdd () {
   return Array.from(argument).map(function(a) {
   return a + 2;
 })
}

 

Polyfill

 

- ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ์ „์—ญ ๊ฐ์ฒด๋“ค(Promise, Map, Set)์„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋กœ ๋ฐ”๊พธ์–ด์ฃผ๋Š” ๊ฐœ๋… 

- ๋ธŒ๋ผ์šฐ์ € ํŒŒํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ณต๋ฐฑ์„ ๋งค๊พธ๋Š” ์Šคํฌ๋ฆฝํŠธ๋‚˜ ๊ธฐํƒ€ ์ฝ”๋“œ๋ฅผ ๋ผ์›Œ๋„ฃ์–ด์คŒ

 

Bable ๊ณผ Polyfill ์€ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•˜๋Š” ๊ฐœ๋…์ธ๋ฐ, Babel ์ด Javascript ์˜ Syntax ๊ฐ€ ์•„๋‹Œ ๊ฒƒ๋“ค์„ Javascript ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ์ค€๋‹ค๋ฉด, Polyfill ์€ Javascript ์˜ Syntax ๋กœ ์ฝํžˆ์ง€๋งŒ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ์ •์˜ํ•ด์ฃผ๋Š” ๊ฐœ๋…์„ ๋งํ•œ๋‹ค.

 

์˜ˆ๋ฅผ๋“ค์–ด Promise ๊ฐ์ฒด๋Š” ๊ธฐ์กด์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ES6 ์—์„œ ์ถ”๊ฐ€๋œ ๊ฐ์ฒด๋กœ, ES6 ์ด์ „์—์„œ new Promise() ๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ Javascript ์˜ Syntax ์ด์ง€๋งŒ ์ •์˜๋˜์ง€ ์•Š๋Š” function ์ด๋ผ๋Š” ์˜๋ฏธ์—์„œ 'Promise is not a function' ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. Polyfill ๊ฐœ๋…์„ ์ด์šฉํ•ด Promise ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •์˜ํ•ด์ฃผ๋Š” ๊ฒƒ์„ Babel-Polyfill ์ด ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

 

Babel-Polyfill

 

๋‚ด๋ถ€์ ์œผ๋กœ ํŽ˜๋ถ์—์„œ ๋งŒ๋“  Generator Function Polyfill ์ธ regenerator-runtime ๊ณผ ES6/7 Polyfill ์ธ core.js๋ฅผ ์ฃผ์š” dependency ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์•ˆ์ •์ ์ธ Polyfill ๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋žฉํ•‘ํ•ด ๋†“์€ ๋ชจ๋“ˆ๋กœ ์‹ค์ œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Polyfill ๋„ ๋ชฝ๋•… ์ถ”๊ฐ€๋˜๋ฏ€๋กœ ๋ฒˆ๋“ค๋ง ๋˜๋Š” ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ฒŒ ๋˜๋Š” ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค. ํ•œ ํŽ˜์ด์ง€์—์„œ ๋”ฑ ํ•˜๋‚˜์˜  babel-polypill ํ˜ธ์ถœ๋งŒ ํ—ˆ์šฉ๋œ๋‹ค.

 

 

Babel-loader

 

 

 

 

Sources

https://github.com/babel/babel-loader

 

GitHub - babel/babel-loader: ๐Ÿ“ฆ Babel loader for webpack

๐Ÿ“ฆ Babel loader for webpack. Contribute to babel/babel-loader development by creating an account on GitHub.

github.com