๐ Webpack์ด๋
์ฌ๋ฌ๊ฐ์ง ์์กด์ฑ ๋ชจ๋์ ํ๋๋ก ๋ฒ๋ค๋งํด์ฃผ๋ ๊ฒ์ ๋งํฉ๋๋ค.
์ฌ๊ธฐ์ (๋ชจ๋)๋ฒ๋ค๋ง์ ์น์ฑ์ ๊ตฌ์ฑํ๋ ๋ช์ญ ๋ช๋ฐฑ๊ฐ์ ์์๋ค์ ํ๋์ ํ์ผ๋ก ๋ณํฉ ๋ฐ ์์ถํด์ฃผ๋ ๋์์ ์๋ฏธํฉ๋๋ค.
๐ฑ ๊ทผ๋ฐ Webpack์ ์ ์ฐ๋ ๊ฑธ๊น?
์ฌ๋ฌ๊ฐ์ ํ์ผ์ ํ๋๋ก ๋ฒ๋ค๋งํ๋ฏ๋ก ์ฌ๋ฌ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋ํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์ฌ๋ผ์ง๋ค๊ณ ํฉ๋๋ค. ํ์ง๋ง ์ด๊ฒ์ ์ถฉ๋ถํ ๋ต์ด ๋์ง ๋ชปํ๋ค๊ณ ์๊ฐ์ ํ์๊ณ ์๋์ ๊ฐ์ ์ด์ ๋ค์ ์ฐพ์ ์ ์์์ต๋๋ค.
- ์ฌ๋ฌ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ ์ ์๊ธฐ๋ ๋ณ์์ ์ ํจ๋ฒ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
- ์ด๋ ํ์ผ ๋จ์๋ก ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์
๋๋ค.
- ๋ณ์์ ์ด๋ฆ์ด ์ค๋ณต ์ ์ธ๋ ๋ ์๋์น ์์ ๊ฐ์ ํ ๋น, ์ถ๋ ฅํ ์ ์๋ค.
- ์ด๋ ํ์ผ ๋จ์๋ก ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์
๋๋ค.
- ์น ๊ฐ๋ฐ ์์
์ ์๋ํ ๋๊ตฌ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ํนํ front ๊ฐ๋ฐ ์ ์ฝ๋ ์์ ํ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๋ณด๋ ค๋ฉด ๋ธ๋ผ์ฐ์ ์์ ์๋ก๊ณ ์นจ์ ๋๋ฌ์ผ๋ง ํ๋๋ฐ Webpack์ผ๋ก ์ด ๋ฒ๊ฑฐ๋ก์์ ํด๊ฒฐ ํ ์ ์๋ ๊ฒ ์ ๋๋ค.
- ์น ์๋น์ค ๊ฐ๋ฐ, ์น ์๋ฒ ๋ฐฐํฌ ์ ์๋์ ๊ฐ์ ์์
์ ํด์ผํ๋๋ฐ ์ด๊ฒ๋ค์ ์๋ํ ํ ์ ์์ต๋๋ค.
- HTML, CSS, JS ์์ถ
- ์ด๋ฏธ์ง ์์ถ
- CSS ์ ์ฒ๋ฆฌ๊ธฐ ๋ณํ
- ์น ์ฑ์ ๋น ๋ฅธ ๋ก๋ฉ ์๋์ ๋์ ์ฑ๋ฅ์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ก๋ฉ ์๋๋ฅผ ๋์ด๋ ค๋ฉด ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ๋ก ์์ฒญํ๋ ํ์ผ ์ซ์๋ฅผ ์ค์ฌ์ผ ํ๋๋ฐ(์๋? HTTP ์์ฒญ ์ซ์๊ฐ ์ ํ๋์ด์๊ธฐ ๋๋ฌธ) Webpack์ ์ด๋ฅผ ํด๊ฒฐํด ์ค๋๋ค.
- ์ด๋ ์ฌ๋ฌ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋ํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์ฌ๋ผ์ง๋ค์ ์ผ๋งฅ์ํตํ๋ค๊ณ ํ ์๋ ์๊ฒ ๊ตฐ์.
๐ฑ ๊ฐ๋จํ๊ฒ Webpack์ ์ ์ฉ ํด๋ณด์
์๋์ ๋ช ๋ น์ด๋ฅผ ํตํด ํ๊ฒฝ์ ์ค์ ํ๋ฉด ๋ฉ๋๋ค. (node์ npm์ด ์ค์น๋์ด ์์์ ๋ฐํ์ผ๋ก ์์ฑํ์์ต๋๋ค.)
npm init -y
npm i webpack-cli -D
#root ๋๋ ํ ๋ฆฌ์ index.html ํ์ผ ์์ฑ
#root ๋๋ ํ ๋ฆฌ์ src ํด๋์ ์์ฑ ํ index.js ์์ฑ
#package.json ํ์ผ์ ์๋์ ๊ฐ์ด ์์
"scripts": {
"build": "webpack --mode=none"
}
npm run build
#root ๋๋ ํ ๋ฆฌ์ webpack.config.js ํ์ผ ์์ฑ
#package.json ํ์ผ์ ์๋์ ๊ฐ์ด ์์
"scripts": {
"build": "webpack"
}
npm run build
#index.html, index.js, webpack.config.js์ ์ฑ์ฐ๋ ๋ด์ฉ์ ์๋ ๊นํ์ ์ฐธ๊ณ ํด์ฃผ์๊ธธ ๋ฐ๋๋๋ค.
์ฌ๊ธฐ๋ฅผ ํด๋ฆญํด์ฃผ์ธ์.
์ ๋ช ๋ น์ด๋ค๊ณผ ๊นํ์ ์ฐธ๊ณ ํ๋ฉด ์นํฉ์ ์ ์ฉํ ์ ์๋๋ฐ, ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ webpack.config.js์ ๋ํ์ฌ ์กฐ๊ธ๋ ์์ธํ๊ฒ ์์๋ด ์๋ค.
๐ฑ webpack.config.js(or Webpack)์ ์์ฑ
์ฒจ๋ถํ ๊นํ ๋งํฌ์์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ webpack.config.js๋ฅผ ๋ณด๋ฉด ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด์์์ ์ ์ ์์ต๋๋ค.
const path = require('path');
module.exports = {
mode: 'none',
entry: './src/index.js',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist'),
},
};
์ฌ๊ธฐ์ entry, output ์์ฑ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ๊ทธ๋ฆฌ๊ณ ์์์ ๋์์์ง๋ ์์ง๋ง loader, plugin์ ์ด๋ค ์์ฑ์ธ์ง ์ดํด๋ด ์๋ค.
- entry ์์ฑ์ ์นํฉ์ ์คํํ ๋์ ํ์ผ์ ์๋ฏธํฉ๋๋ค.
- ์ ์ฝ๋๋ฅผ ๋ฐํ์ผ๋ก ์ค๋ช ํ์๋ฉด src ํด๋ ๋ฐ์ index.js๋ฅผ ๋์์ผ๋ก ์นํฉ์ด ๋น๋๋ฅผ ์ํํ ์ ์๋ ๊ฒ์ ๋๋ค.
- entry ์์ฑ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๋ฐ์ ์ธ ๊ตฌ์กฐ์ ๋ด์ฉ์ด ๋ด๊ฒจ์ผํฉ๋๋ค.
- ๊ทธ๋ ๊ธฐ์ ์น์ด ์ฑ๊ธํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
์ผ๋์ ๋ฉํฐํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
์ผ๋์ ๋ชจ์ต์ด ๋ค๋ฆ
๋๋ค.
//SPA ์ผ ๋ entry: './src/index.js' //๋ฉํฐํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ผ ๋ entry: { login: './src/LoginView.js', main: './src/MainView.js' }โ
- ๊ทธ๋ ๊ธฐ์ ์น์ด ์ฑ๊ธํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
์ผ๋์ ๋ฉํฐํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
์ผ๋์ ๋ชจ์ต์ด ๋ค๋ฆ
๋๋ค.
- output ์์ฑ์ ์นํฉ์ ๋๋ฆฌ๊ณ ๋ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์๋ฏธํ๋ฉฐ ๊ฐ์ฒด ํํ๋ก filename, path ์์ฑ์ ์ง์ ํด์ฃผ์ด์ผํฉ๋๋ค.
- Loader๋ ์นํฉ์ด ์น ์ ํ๋ฆฌ์ผ์ด์
์ ํด์ํ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ์๋ ์น ์์(HTML, CSS, Images, ํฐํธ ๋ฑ)๋ค์ ๋ณํํ ์ ์๋๋ก ๋์์ฃผ๋ ์์ฑ์
๋๋ค.
- ๋น๋์ ๋์์ด ๋๋ index.js์
์ด์ ๊ฐ์ ์ฝ๋๊ฐ ์์ ๊ฒฝ์ฐ styles.css ํ์ผ์ ํด์ํ๊ธฐ ์ํ ์ ์ ํ ๋ก๋๋ฅผ ์ถ๊ฐํด๋ฌ๋ผ๋ ์๋ฌ๋ฅผ ์นํฉ์ ๋์ธ ๊ฒ์ ๋๋ค.import './styles.css';โ
- CSS๋ก๋๋ฅผ ์ค์นํ๊ณ webpack.config.js๋ฅผ ์๋์ ๊ฐ์ด ์์ ํ๋ฉด ์๋ฌ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
npm i css-loader -Dโ
const path = require('path'); module.exports = { mode: 'none', entry: './src/index.js', output: { filename: 'main.js', path: path.resolve(__dirname, 'dist'), }, module: { rules: [ { test: /\.css$/, use: ['css-loader'] } ] }, };โ
- test๋ ํ์ผ์ ์ ํ์, use๋ ๋ก๋์ ์ด๋ฆ์ ๋งํฉ๋๋ค.
- ๋น๋์ ๋์์ด ๋๋ index.js์
- plugin์ ์นํฉ์ ๊ธฐ๋ณธ๋์์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์์ฑ์
๋๋ค. ๋ก๋๋ ํ์ผ์ ํด์ํ๊ณ ๋ณํํ๋ ๋ฐ๋ฉด, ํ๋ฌ๊ทธ์ธ์ ๊ฒฐ๊ณผ๋ฌผ์ ํํ๋ฅผ ๋ฐ๊พธ๋ ์ญํ ์ ํ๋ค๊ณ ์๊ฐํ ์ ์์ต๋๋ค.
- ํ๋ฌ๊ทธ์ธ์ ๋ฐฐ์ด์๋ ์์ฑ์ ํจ์๋ก ์์ฑํ ๊ฐ์ฒด ์ธ์คํด์ค๋ง ์ถ๊ฐ๋ ์ ์์ต๋๋ค.
- ์์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋ฉ๋๋ค.
์ถ์ฒ : ์บกํด ํ๊ต๋์ ์นํฉ ํธ๋๋ถ, ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ, webpack ๊ณต์๋ฌธ์
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ํจ์์ ์ผ๊ธ ๊ฐ์ฒด (0) | 2021.11.28 |
---|---|
[JavaScript] ์์ฑ์ ํจ์ (0) | 2021.11.21 |
[JavaScript] ๋นํธ์ธ ๊ฐ์ฒด (0) | 2021.11.05 |
[JavaScript] Symbol (0) | 2021.10.23 |
[JavaScript]์ ์ญ ๋ณ์์ ๋ฌธ์ ์ (0) | 2021.10.06 |