-
๐ฆ ์นํฉ(Webpack) 1 | ์นํฉ์ ๊ฐ๋ , ๋ฒ๋ค๋ฌ(Bundler), ์นํฉ ์ฌ์ฉ๋ฐฉ๋ฒwebpack 2020. 12. 27. 18:54
์น ๊ฐ๋ฐ์ ๊ณต๋ถํ ๋ ์์ฃผ ๋ฑ์ฅํ๋ ๋จ์ด '์นํฉ', ์นํฉ์ด๋ ๋ฌด์์ผ๊น?
ํ๋์ ์น ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ .sassํ์ผ(css), .jsํ์ผ, .htmlํ์ผ, .jpg ์ด๋ฏธ์ง ํ์ผ ๋ฑ ์๋ง์ ํ์ผ์ด ์๊ฒจ๋๋ค.
naver.com ํ์ด์ง์ ์ ์ํ๋๋ผ๋ ๊ต์ฅํ ๋ง์ JS,CSS, Img ํ์ผ๋ค์ ๋ถ๋ฌ์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ๋ง์ ํ์ผ์ ์๋ฒ์ ๊ณ์ ํต์ ํ๋ฉฐ ๋ฐ์์ฌ ๊ฒฝ์ฐ, ๋ ๋๋ง ์๋๊ฐ ๋๋ ค์ง ๊ฒ์ด๋ค.
๋ํ, ๊ฐ์ ๋ณ์๋ช ์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ํ์ผ์ด ์๋ค๋ฉด, ๋ฎ์ด์์์ง๋ ๋ฑ ๋ฌธ์ ์ ์ด ์๊ธด๋ค.
๋ฐ๋ก ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๋์ ๋ ๊ฐ๋ ์ ๋ชจ๋(module)์ด๋ค. ์คํฌ๋ฆฝํธ์ ํ์ ์ ๋ชจ๋๋ก ๋ฐ๊พผ ํ, export, import๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๋๋ผ๋ ๊ฐ๊ฐ ๋ถ๋ฆฌํด์ ์ฌ์ฉํ ์ ์๋ค. export๋ word์ ๊ฐ์ ์ค์ง word๊ฐ ์ ์๋ ํ์ผ ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์๋ค.
<script type="module"> import hello_word from "./source/hello.js"; import wolrd_word from "./source/world.js"; document.querySelector("#root").innerHTML = hello_word; </script>
let hello_word = "hello"; export default hello_word;
ํ์ง๋ง ์ด ๊ฒฝ์ฐ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ์ ์ด ์๊ธด๋ค. ์ผ๋จ import, export๋ผ๋ ํค์๋๋ ES6์์ ์๋ก ์ถ๊ฐ๋ ํค์๋์ด๊ธฐ ๋๋ฌธ์ ์์ง ์ง์๋์ง ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ index.html ํ์ผ์ ์ด๋ฉด ํ์ผ๋ค์ด ๋ฐ์์์ง๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ํ์ง๋ง ํ๋๊ฐ ์๋๋ผ ์๋ฐฑ, ์์ฒ๊ฐ์ ํ์ผ์ ๋ถ๋ฌ์จ๋ค๋ฉด ์๋๊ฐ ๊ต์ฅํ ๋๋ ค์ง ๊ฒ์ด๋ค.
์ด ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จ ๋๊ตฌ๋ค์ ๋ฒ๋ค๋ฌ(Bundler)๋ผ๊ณ ํ๋ค.
Bundle
* Bundle, ๋ฒ๋ค์ ์์ด๋ก ๋ฌถ์์ด๋ผ๋ ๋ป์ด๋ฉฐ ๋ณดํต ์ํ์ ๊ตฌ๋งคํ์ ๋ ๋ผ์์ฃผ๋ ๊ฒ์ ๋งํ๋ค. (ex ์ค๋งํธํฐ์ ์ฌ๋ฉด ์ฃผ๋ ์ด์ดํฐ์ด๋ ์ถฉ์ ๊ธฐ ๋ฑ์ด๋ค)
์น ๊ฐ๋ฐ์์ ๋งํ๋ ๋ฒ๋ค์ ์ ์๋ ๊ตฌ์กฐ์ ํ์ผ ํ์ฅ์๋ฅผ ๊ฐ๋ ๋๋ ํฐ๋ฆฌ๋ก, ๊ฐ๋ ์ ๊ด๋ จ๋ ํ์ผ๋ค์ ๋ชจ๋ ํ๋๋ก ๋ฌถ์ด์ฃผ๋ ์ญํ ์ ํ๋ ๋๊ตฌ์ด๋ค. (Webpack, Broserify, Parcel, etc.)
๊ทธ๋ฆฌ๊ณ ๊ทธ ์ค ์นํฉ์ ๊ฐ์ฅ ์ธ๊ธฐ์๋ ๋ฒ๋ค๋ฌ ์ค ํ๋์ด๋ค.
์นํฉ ์ฌ์ฉ ๋ฐฉ๋ฒ
์ด์ ์นํฉ์ ์ฌ์ฉํด์ word ๋ณ์๋ฅผ ์ถ๋ ฅํด๋ณด์.
1. node.js ํ๋ก์ ํธ ์ ์ธํ๊ธฐ
npm init
package name๋ง ์ ๋ ฅํด์ฃผ๊ณ , ๋๋จธ์ง๋ enter๋ก ๊ธฐ๋ณธ์ค์ ์ ํด์ฃผ๋ฉด package.jsonํ์ผ์ด ์์ฑ๋๋ค.
* package.json : ํ๋ก์ ํธ์ ๋ํ ์์ธํ ์ค๋ช ์
* npm : ๋ชจ๋ ์คํ ์ด
2. webpack, webpack-cli ์ค์นํ๊ธฐ
npm install -D webpack webpack-cli
package.json ํ์ผ์ ๋ชจ๋์ด ์ถ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
3. ์นํฉ ์คํ์ํค๊ธฐ
npx webpack --entry ./source/index.js --output-path ./public/index_bundle.js
์ด ๋ช ๋ น์ด์ ๋ป์ ์ํธ๋ฆฌ ํ์ผ(์ฒ์ ํ๋ฉด์ ๋ ๋๋ง๋๋ ํ์ผ)์ index.js์ด๊ณ , ๋ฒ๋ค๋ง ํ ํ(๋ชจ๋ ํ์ผ์ ํ๋๋ก) ๊ฒฐ๊ณผ๋ฌผ์ ./public/index_bundle.js ์ ์์ฑํ๋ผ๋ ๋ช ๋ ์ด์ด๋ค. (๋์ค์ ์ค์ ํ์ผ์ ๋ง๋ค์ด์ ํ ๋ฒ์ ๊ด๋ฆฌํ ์๋ ์๋ค)
๋ฒ๋ค๋ง์ด ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด์ ๋ฒ๋ค๋ง๋ ํ์ผ์ index.html ์์ ์คํฌ๋ฆฝํธ ํ์ผ๋ก ๋ถ๋ฌ์ค๋ฉด ๋ ๋๋ง๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋จ ํ๋์ ๋ฒ๋ค๋ง๋ ํ์ผ๋ง์ ๋ค์ด๋ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด์ ์๋ฌด๋ฆฌ ํ์ผ์ด ๋ง๋๋ผ๋ ๋น์ทํ ํ์ผ๋ผ๋ฆฌ(.js, .css, etc.) ํฉ์ณ์ ธ ํ๋์ ํ์ผ๋ง์ ๋ถ๋ฌ์ฌ ๊ฒ์ด๋ค. (์นํฉ์ ๊ธฐ๋ฅ)
create-react-app์ ๊ฒฝ์ฐ
CRA๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋ฐ์ ํ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ Webpack ์ค์ ๋ค์ด ๋์ด์๋ค. ๋๋ฌธ์ ์ค์ ๋ค์ ๋ณด๊ธฐ ์ํด์๋ ejectํด์ํ๋ค.
npx run eject
์๋ก ์์ฑ๋ config์ scripts ๋๋ ํฐ๋ฆฌ์์ webpack ์ค์ ์ ๋ณผ ์ ์๋ค.
์ฆ, ์นํฉ์ ๊ณต์ํํ์ด์ง์ ๋์จ ๊ทธ๋ฆผ์ฒ๋ผ INPUT์ผ๋ก ์ฌ๋ฌ ๋ชจ๋๋ค์ด ๋ค์ด์์ ๋, ๊ฐ๊ณต์ ํด์ ํ๋์ ํ์ผ๋ก OUTPUT์ ๋ด์ฃผ๋ ๋๊ตฌ์ด๋ค.
[์ฐธ๊ณ ์๋ฃ]
'webpack' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ฆ ์นํฉ(Webpack) 2 | ์นํฉ๊ณผ ๋ฐ๋ฒจ๋ก CRA ๊ตฌํํ๊ธฐ (0) 2021.12.12