webpack-babel
webpack
์นํฉ์ ์คํ์์ค๋ก js ๋ชจ๋ bundler์ด๋ค. (bundler๋ ์ด๋ ํ ๋จ์๋ก ์ฌ๋ฌ๊ฐ์ ํ์ผ๋ค์ ํ๋๋ก ๋ง๋ค์ด ์์ฒญ์ ์๋ต์ ํ๊ธฐ์ํ ํ๊ฒฝ์ ๊ด๋ฆฌํ๋ ๊ฒ.
ํ ํ์ด์ง์ ์ฌ๋ฌ๊ฐ๋ก ๋๋์ด์ง ์๋ง์ ๋ฐ์ดํฐ ํ์ผ๋ค(css,js๋ฑ)์ ํ๋ํ๋ ์์ฒญํ ์๋ตํ๊ธฐ์๋ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๋ชจ๋๋ค์ ํ๋๋ก ํฉ์ณ์ฃผ๋ ์ญํ ์ ํ๋ ๋ฒ๋ค๋ฌ
๋ฒ๋ค๋ฌ๋? ์์กด์ฑ์ด ์๋ ํ์ผ(๋ชจ๋)๊ฐ ํ๋๋ก ๋ง๋ค์ด ์ฃผ๋ ๋๊ตฌ ์ฝ๋์ ์์กด์ฑ(dependecy)๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํจ
Js์ ๋ชจ๋์ด ๋์ ๋๋ฉด์ ์๋ง์ ๋ชจ๋๋ค์ ์ฑ๋ฅ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ฑ์ฅ
๋น๋ ๋๊ตฌ [Webpack/Grunt/Gulp ๋ฑ์ด ์๋ค.])_
webpack์ ํ์ ๋ฐฐ๊ฒฝ
Js๋ฅผ ๋ชจ๋ํ ํ๊ธฐ ์ํด ํ์ํ์ผ๋ฉฐ, ๊ทธ ์์์ผ๋ก๋ ์๋์ ๊ฐ์ ๋ช ์ธ๋ฅผ ๋ฟ๋ฆฌ๋ก ์์ํ๋ค.
ํ๋์ ํ๋ก์ ํธ ๋ด์ ์กด์ฌํ๋ ์ฌ๋ฌ๊ฐ์ ํ์ผ๋ค์ ์๋ก ๋ถ๋ฌ๋ค ์ฐ๋ค๋ณด๋ฉด, ๋ฐ์ํ๋ ๋ณ์ ์ถฉ๋์ ์ํ์ฑ์ ํด๊ฒฐ ํ๊ธฐ ์ํด IIFE(์ฆ์ ํจ์ ํธ์ถ)
์ ๋ฐฉ์์ผ๋ก ๋ชจ๋ํ๋ฅผ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ํ์ ์ธ ๋ช
์ธ๊ฐ CommonJs
์ AMD
๊ฐ ์๋ค.
CommonJs
์ ํ์๋ฐฐ๊ฒฝ์ JS๋ฅผ ๋ธ๋ผ์ฐ์ ๋ฐ์ผ๋ก ๊บผ๋ด๊ธฐ ์ํด ๋ชจ๋ํ๋ฅผ ์ํค๋ฉด์ ์๊ฒจ๋ฌ์ผ๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ ๋ค์ํ ํ๋ก์ ํธ๊ฐ ์๋ค.
๋จ์ ์ผ๋ก ํ์ํ ๋ชจ๋์ ๋ชจ๋ ๋ด๋ ค๋ฐ์๋๊น์ง ์๋ฌด๊ฒ๋ ํ ์ ์๊ฒ ๋๋ ๊ฒ. ๋ธ๋ผ์ฐ์ ์์ ๋์ํ ๋๋ ๋น๋๊ธฐ ๋ชจ๋ ๋ก๋ ๋ฌธ์ ๋ก ํ์ผ ๋จ์์ ์ค์ฝํ๊ฐ ์กด์ฌ ํ์ง ์๊ณ ์ ์ญ๋ณ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ require.define()ํจ์๋ฅผ ์ด์ฉํด ์ ์ญ๋ณ์๋ฅผ ํต์
AMD
๋ ๋น๋๊ธฐ ์ํฉ์์๋ JS๋ชจ๋์ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ ๋ช
์ธ.
CommonJs
์ AMD
๋ ๋ชจ๋ ๋ก๋ ๋ฐฉ์์ ์ฐจ์ด. ํ์ผ์ด ๋ชจ๋ ๋ก์ปฌ ๋์คํฌ์ ์์๋๋ CommonJs
๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ด๋ ค๋ฐ์์ผํ๋ ๊ฒฝ์ฐ AMD
๊ฐ ๋ ์ ์ฐํ ๋ฐฉ๋ฒ ์ ๊ณต
webpack ํต์ฌ 4๊ฐ์ง ๊ฐ๋
์ํธ๋ฆฌ : ๋ชจ๋ ํ์ผ์ ๋ชจ๋ํํด์ ๋ฌถ๋ ์นํฉ์์ ๊ทธ
์์์
์๋ก ์ฐ๊ฒฐ๋์ด์๋ ๋ชจ๋๊ฐ์ ์์กด์ฑ๋ค์ ์์ ๋ชจ๋์์ํ : ์ํธ๋ฆฌ์ ์ค์ ํ Jsํ์ผ์ ์์์ผ๋ก ๋ชจ๋ ๋ชจ๋์ ํ๋๋ก ๋ฌถ์ด ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฌผ๋ก ์ฌ๊ธฐ์ ๋ช ์๋์ด ์๋ ์ ๋ณด๋ฅผ ํตํด ๋น๋ ํ์ผ ์์ฑ
path : ๊ฒฐ๊ณผ ํ์ผ ์ ์ฅ๋ ๊ฒฝ๋ก
publicPath : ํ์ผ๋ค์ด ์์นํ ์๋ฒ์์ ๊ฒฝ๋ก
filename : ํ์ผ์ด๋ฆ (
[name]
์ผ๋ก ํ์ผ์ด๋ฆ์ ์ฌ์ฉํ๋ฉด entry์ ์ด๋ฆ์ด ์ ์ฉ๋๋ค.)
๋ก๋ : webpack์ js, ์ด๋ฏธ์ง, css, file๋ฑ ๋ชจ๋ ๋ชจ๋๋ก ๋ณด๊ณ ๊ด๋ฆฌํ๋ค๊ณ ํ๊ธฐ ๋๋ฌธ์, js๋ฐ์ ์ดํด๋ฅผ ๋ชปํ๋ webpack์ ์ํด ์ดํดํ ์ ์๊ฒ ๋ณ๊ฒฝํด์ฃผ๋ ์ญํ ์ ํ๋ ๊ฒ.
babel-loader, css-loader, style-loader, file-loader, url-loader, custom-loader๋ฑ ๋ค์ํ๊ฒ ์กด์ฌํ๊ณ ์ ์ํ ์ ์๋ค.
JSX
๋TS
์ ๊ฐ์ ๋ฌธ๋ฒ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๊ฒ js๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ธฐ๋ฅtarget : ์ง์ํ๊ธธ ์ํ๋ ํ๊ฒฝ
modules :
false
๋ก ํ๋ฉด ์ต์ ๋ชจ๋ ์์คํ ์ด ๊ทธ๋๋ก ์ ์ง๋ํธ๋ฆฌ ์์ดํน
์ด ๋๋ค.(์ฌ์ฉํ์ง ์์ ๋ชจ๋๋ค์ ์ ๋ฆฌํด์ฃผ๋ ๊ธฐ๋ฅ)useBuiltIns : entry์ ํ์ผ๋ค์ target์ ๋ง๊ฒ ๋ฐ๊พธ์ด์ฃผ๋ ์ญํ
entry
usage
false
ํ๋ฌ๊ทธ์ธ : ๋ฒ๋ค๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ฒ๋ฆฌํ๋ฉฐ, ๋ฒ๋ค๋ js๋ฅผ ๋๋ ํ ํ๊ฑฐ๋ ํน์ ํ ์คํธ๋ฅผ ์ถ์ถํ๋ ์ฉ๋.
์ถ๊ฐ ๊ฐ๋
mode :
development
/production
resolve : ์นํฉ์ด ์์์ ๊ฒฝ๋ก๋ ํ์ฅ์๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์์ฃผ๋ ์ต์
modules : ๋ชจ๋๋ค์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํ๋ฉด ์ด๋ฅผ ํตํด ์ธ์
extensions : ์ง์ ํ ํ์ฅ์๋ค์ ์์์ ์ฒ๋ฆฌํด ์ค๋ค.
Polyfill
์น ๊ฐ๋ฐ์ ์์ด ์ด๋ค ๊ธฐ๋ฅ์ ์ง์ํ์ง ์๋ ์น๋ธ๋ผ์ฐ์ ์์์ ๊ทธ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํ ์ฝ๋๋ก Js
๋ ๊ณ์ํด์ ๋ฐ์ ํ๋ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ์น ๋ธ๋ผ์ฐ์
๋ฅผ ๋ง๋๋ ๊ณณ์์์ JS ์์ง
๋ํ ์ง์์ ์ธ ์
๋ฐ์ดํธ๊ฐ ์๋ค๋ฉด ์๋ก์ด ๋ฌธ๋ฒ,๊ธฐ๋ฅ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ํธํ์ฑ์ ์ํ ์ฝ๋์ด๋ค.
babel ์ด๋
babel github ์ ๋ณด๋ฉด ์๋์ ๊ฐ์ด ์๊ฐ๊ฐ ๋์ด์๋ค.
Babel์ ์ต์ ๋ฒ์ ์ JavaScript๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด๋๋ ๋๊ตฌ์ ๋๋ค. ์ง์๋๋ ํ๊ฒฝ์ด ํน์ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ Babel์ ํด๋น ๊ธฐ๋ฅ์ ์ง์๋๋ ๋ฒ์ ์ผ๋ก ์ปดํ์ผํ๋๋ก ๋์์ค๋๋ค.
babel์ ์คํ ์์ค๋ก์จ, js ์ปดํ์ผ๋ฌ ์ธ๊ฒ์ด๋ค. (์ปดํ์ผ์ ์์ค์ฝ๋๋ฅผ ๊ธฐ๊ณ๊ฐ ์ดํดํ ์ ์๋ ์ฝ๋๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์ธ๋ฐ, JS์์ง๋ํ ๊ธฐ๊ณ์ด๊ณ ์ด๋ฐ ์์ง์ด ์ดํดํ ์ ์๊ฒ ๋ฐ๊ฟ์ฃผ๋ ๊ณผ์ ์ด๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ๋ฌ๋ผ๊ณ ๋ณผ ์ ์๋ค.)
์ฌ๊ธฐ์ js๋ ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ธ๋ฐ ์ ์ปดํ์ผ๋ฌ๊ฐ ํ์ํ๋๊ณ ํ ์ ์๋๋ฐ, babel์ ์ ํํ transfiler (์์ค ๋ ์์ค ์ปดํ์ผ๋ฌ)๋ก ์ผ์ข ์ ํ์ฌ js์ฝ๋๋ ts์ฝ๋๋ฅผ ์๋ก์ด js์ฝ๋๋ก ๋ง๋ค์ด๋ด๋ ๊ฒ.
์ฌ๊ธฐ์ ts๋ฅผ js๋ก ๋ณํ ํ๋ ๊ฒ์ ์ดํด๊ฐ ๋๋๋ฐ js์์ js๋ก ๋ณํํ๋ ์ด์ ๊ฐ ๋ฌด์์ด๋๊ณ ๋ฌป๋๋ค๋ฉด, ๊ทธ ์ด์ ๋ js๋ฌธ๋ฒ์ด ๋ณํํ์ฌ ํ์ฌ js๋ฌธ๋ฒ์ด legacy
๊ฐ ๋๊ฑฐ๋, ํ์ฌ ๋ฌธ๋ฒ์ด IE
์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ์์๋ ์ง์์ ํ์ง ์๊ฑฐ๋ ์๋ก์ด ๋ฌธ๋ฒ์ด๋ผ๋ฉด, ํด๋น ๋ธ๋ผ์ฐ์ ์์๋ ๋์๊ฐ ์ ์๊ฒ ์๋์ผ๋ก ๋ง๋ js๋ฌธ๋ฒ์ผ๋ก ๋ณํํด์ฃผ๋ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฅผ ๋ค์ด ES2020
์ ๋ฌธ๋ฒ์ธ ??*(nullish ๋ณํฉ)*
๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ค๊ณ ํ์.
์์ ์ต์ ๋ฌธ๋ฒ์ ํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์ธ์ํ ์ ์๊ฒ ์๋์ ๊ฐ์ด ๋ฐ๊ฟ์ฃผ๋ ์ญํ ์ ํ๋ ๊ฒ์ด babel.
์ฃผ์ ์ญํ
transpiler : ์์์ ์ค๋ช ํ ๊ฒ ์ฒ๋ผ ์ฝ๋๋ฅผ ์ฌ์์ฑํด์ฃผ๋ ์ญํ ๋ก ์นํฉ๊ณผ ๊ฐ์ ๋น๋ ์์คํ ์ ์ฝ๋๊ฐ ์์ ๋ ๋๋ง๋ค ์๋์ผ๋ก ํธ๋์คํ์ผ๋ฌ๋ฅผ ๋์์์ผ์ค๋ค.
polyfill : ์๋กญ๊ฒ ํ์ค์ ์ถ๊ฐ๋ ํจ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ํ์ค์ ์ค์ํ ์ ์๊ฒ ๊ธฐ์กด ํจ์์ ๋์ ๋ฐฉ์์ ์์ ํ๊ฑฐ๋, ์๋กญ๊ฒ ๊ตฌํํด์ฃผ๋ ์ญํ . (์ด๋ ์๋กญ๊ฒ ๊ตฌํํ ํจ์์ ์คํฌ๋ฆฝํธ๋ฅผ ํด๋ฆฌํ์ด๋ผ ๋ถ๋ฅธ๋ค. => ๊ตฌํ์ด ๋๋ฝ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๋งค๊ฟ์ฃผ๋ ์ญํ )
core js
,polyfill.io
๋ฑ์ด ์๋ค.
Reference
webpack
https://jeonghwan-kim.github.io/js/2017/05/15/webpack.html
https://d2.naver.com/helloworld/12864
https://ui.toast.com/fe-guide/ko_BUNDLER
babel
https://github.com/babel/babel
https://en.wikipedia.org/wiki/Babel_(transcompiler)
https://ko.javascript.info/nullish-coalescing-operator
https://ko.wikipedia.org/wiki/%EC%86%8C%EC%8A%A4_%EB%8C%80_%EC%86%8C%EC%8A%A4_%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC
Last updated