Webpack
์ธํ๋ฐ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ์นํฉ / ์ฅ๊ธฐํจ(์บกํดํ๊ต)
Node.js์ NPM
์นํฉ์ ์ฌ์ฉํ๊ธฐ ์ํด Node.js์ NPM์ด ์ค์น๋์ด ์์ด์ผ ํจ Node.js๋ฅผ ์ค์นํ๋ฉด NPM์ ํจ๊ป ์ค์น๊ฐ ๋จ
Node.js
๋ธ๋ผ์ฐ์ ๋ฐ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๋ ํ๊ฒฝ์ ์๋ฏธ
NPM(Node Package Manager)
์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ํจํค์ง)๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๋๊ตฌ(jQuery, Tensorflow, express ๋ฑ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณต๊ฐ๋ ์ ์ฅ์์ ์ฌ๋ ค๋๊ณ npm ๋ช ๋ น์ด๋ก ํธํ๊ฒ ๋ค์ด๋ก๋ ๋ฐ์ ์ ์์
node -v
: ๋ ธ๋ ๋ฒ์ ํ์ธnpm -v
: NPM ๋ฒ์ ํ์ธnpm init [-y]
: NPM ์ด๊ธฐํ ๋ช ๋ น์ด(-y ๊ธฐ๋ณธ๊ฐ์ผ๋ก package.jsonํ์ผ ์์ฑ)npm install [library] (--save-prod)
: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์ญ ์ค์น1(node_modules/library/dist/library.js)npm install [library] --save-dev(-D)
: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์ญ ์ค์น2(devDependencies๋ก ๊ด๋ฆฌ)npm uninstall [library]
: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ญ์ npm install [library] --global(-g)
: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์คํ ๋ ๋ฒจ์ ์ ์ญ(global)์ผ๋ก ์ค์น
์ง์ญ ์ค์น vs ์ ์ญ ์ค์น
์ง์ญ ์ค์น : ํด๋น ํด๋ ๋ด์์ node_modules ํด๋๋ฅผ ์์ฑํ์ฌ ์ค์น
์ ์ญ ์ค์น : ์์คํ ๋ ๋ฒจ์ ์ ์ญ์ผ๋ก ์ค์นํ์ฌ ํฐ๋ฏธ๋์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ ์ ๋ ฅํ์๋ ๋ช ๋ น์ด๋ก ์ธ์
NPM์ ์ฌ์ฉํ๋ ์ด์
ํ๋ก์ ํธ์ ์ฌ์ฉํ๋ package(๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ๋ฒ์ ๊ด๋ฆฌ
ํด๋น package CDN์ ์ง์ ์ฐพ์์ ๊ฐ์ ธ์ค์ง ์๊ณ npm install๋ก ๋ฐ๋ก ์ค์น ๊ฐ๋ฅ
๋๋ถ๋ถ์ ์นํฉ ํ๋ก์ ํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก npm์ด ๋๋ฐ๋จ
dependencies์ devDependencies
dependencies : npm i [library]
์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ฉด๋ก์ง๊ณผ ์ง์ ์ ๊ด๋ จ์ด ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ex.jquery, vue, react, angular, chart ๋ฑ)
devDependencies : npm i [library] -D
๊ฐ๋ฐ์ ํ ๋ ๋์์ ์ฃผ๋ ๊ฐ๋ฐ ๋ณด์กฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ex.webpack, sass, js-compression ๋ฑ)
๋ฐฐํฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ dependencies
npm run build
๋ก ๋น๋๋ฅผ ํ๋ฉด ์ต์ข ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ์์ ํฌํจ๋จ
๊ฐ๋ฐ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ devDependencies
์ต์ข ๋ฐฐํฌ ์ ํฌํจ๋์ง ์์
์นํฉ Webpack
ํ๋ก ํธ์๋ ํ๋ ์์ํฌ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ(Module Bundler) ๋ชจ๋ ๋ฒ๋ค๋ฌ๋? ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ์์์ ๋ชจ๋ ๊ฐ๊ฐ ๋ชจ๋๋ก ๋ณด๊ณ ์กฐํฉํด์ ๋ณํฉ๋ ํ๋์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋๋ ๋๊ตฌ
webpack webpack-cli
lodash
dist/main.js
: ์นํฉ์ผ๋ก ๊ตฌ์ฑํ ๊ฒฐ๊ณผ๋ฌผ(์ฆ์์คํํจ์IIFE ๊ตฌ์ฑ)์๋ฐ์คํฌ๋ฆฝํธ๋ง์ ์ํ ๋๊ตฌ๊ฐ ์๋ ์น์ ๊ตฌ์ฑํ๋ ๋ชจ๋ ๋ฆฌ์์ค์ ๋ํ ๋๊ตฌ์
devtool: 'source-map'
: ๋น๋ ํ ์๋ ํ์ผ๋ก ์ฐ๊ฒฐ
๋ชจ๋ ๋ฒ๋ค๋ง์ด๋?
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ๋ช์ญ, ๋ช๋ฐฑ๊ฐ์ ์์๋ค์ ํ๋์ ํ์ผ๋ก ๋ณํฉ ๋ฐ ์์ถํด์ฃผ๋ ๋์(๋น๋==๋ณํ==๋ฒ๋ค๋ง)
๋ชจ๋ ์ด๋?
ํ๋ก๊ทธ๋จ์์ ํน์ ๊ธฐ๋ฅ์ ๊ฐ๋ ์์ ์ฝ๋ ๋จ์๋ฅผ ์๋ฏธ
์นํฉ์ ๋ฑ์ฅ๋ฐฐ๊ฒฝ
ํ์ผ ๋จ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ด๋ฆฌ
ํ์ผ๋จ์๋ก ์ค์ฝํ๊ฐ ๊ตฌ๋ถ๋์ง ์์(์ ์ญ๋ณ์)
์น ๊ฐ๋ฐ ์์ ์๋ํ ๋๊ตฌ
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅธ ๋ก๋ฉ ์๋์ ๋์ ์ฑ๋ฅ
์นํฉ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ํ ์์์ ๋ฏธ๋ฆฌ ๋ก๋ฉํ๋๊ฒ ์๋๋ผ ๊ทธ ๋ ๊ทธ ๋ ์์ฒญํ์๋ ์ฒ ํ์ ๊ฐ๊ณ ์์
์นํฉ์ผ๋ก ํด๊ฒฐํ๋ ค๋ ๋ฌธ์
๋ธ๋ผ์ฐ์ ๋ณ HTTP ์์ฒญ ์ซ์์ ์ ์ฝ
TCP ์คํ์ ๋ฐ๋ผ ๋ธ๋ผ์ฐ์ ์์ ํ๋ฒ์ ์๋ฒ๋ก ๋ณด๋ผ ์ ์๋ HTTP์์ฒญ ์ซ์๋ ์ ์ฝ๋์ด ์์
Dynamic Loading & Lazy Loading ๋ฏธ์ง์
์นํฉ์ ์ฃผ์์์ฑ
mode
๋ฒ์ 4 ์ด์์์ ์ถ๊ฐ๋ ์์ฑ
'none'
'production'
'development'
Entry
์นํฉ์์ ์น ์์์ ๋ณํํ๊ธฐ ์ํด ํ์ํ ์ต์ด ์ง์ ์ ์ด์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ, ๊ฒฝ๋ก
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ๊ตฌ์กฐ์ ๋ด์ฉ์ด ๋ด๊น
Output
์นํฉ์ ๋๋ฆฌ๊ณ ๋ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ผ ๊ฒฝ๋ก
์ต์ํ
filename
์ ์ง์ ํด์ค์ผํจํ์ผ ์ด๋ฆ ์ต์ ์ ๋งค ๋น๋์ ๊ณ ์ ํด์๊ฐ์ ๋ถ์ฌ ์๋ก๊ณ ์นจํด์ผํ๋ ์ํฉ์ ๋ฐฉ์งํ ์ ์์
Loader(module)
์นํฉ์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํด์ํ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ์๋ ์น ์์๋ค์ ๋ณํํ ์ ์๋๋ก ๋์์ฃผ๋ ์์ฑ
plugin(plugins)
์นํฉ์ ๊ธฐ๋ณธ์ ์ธ ๋์์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์์ฑ
ํ๋ฌ๊ทธ์ธ์ ๊ฒฐ๊ณผ๋ฌผ์ ํํ๋ฅผ ๋ฐ๊พธ๋ ์ญํ
Webpack Dev Server
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๊ณผ์ ์์ ์ ์ฉํ๊ฒ ์ฐ์ด๋ ๋๊ตฌ ์นํฉ์ ๋น๋ ๋์ ํ์ผ์ด ๋ณ๊ฒฝ ๋์์ ๋ ์ฝ๋๋ง ๋ณ๊ฒฝํ๊ณ ์ ์ฅํ๋ฉด ์นํฉ์ผ๋ก ๋น๋ํ ํ ์๋ก๊ณ ์นจ ํด์ค ์นํฉ์ ๋น๋ ์๊ฐ ๋ํ ์ค์ฌ์ค
์นํฉ ๋ฐ๋ธ ์๋ฒ๋ก ๋น๋ํ ๊ฒฐ๊ณผ๋ฌผ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ณ ํ์ผ๋ก ์์ฑํ์ง ์์(ํ์ผ ์์คํ ์ ๋์ค์ง ์์)
์นํฉ ๋ฐ๋ธ ์๋ฒ๋ ๊ฐ๋ฐํ ๋๋ง ์ฌ์ฉํ๋ค๊ฐ ์๋ฃ๋๋ฉด ์นํฉ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด ๊ฒฐ๊ณผ๋ฌผ์ ํ์ผ๋ก ์์ฑ
์ปดํจํฐ ๊ตฌ์กฐ ๊ด์ ์์ ํ์ผ ์ ์ถ๋ ฅ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ์ ์ถ๋ ฅ์ด ๋ ๋น ๋ฅด๊ณ ์์์ด ๋ ์๋ชจ๋จ
Last updated