2022. 1. 8. 20:03ใWebpack
์นํฉ์ด๋
์นํฉ์ ๋ฒ๋ค๋ง(ํตํฉ) ์์ ์ ํตํ์ฌ javascript, css, htmlํ์ผ ๋ฑ์ ํ๋์ ํ์ผ๋ก ํตํฉ์์ผ์ฃผ๋ ๋๊ตฌ์ด๋ค.
์ด๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
์นํฉ์ ์๊ธฐ ์ ์ ์นํฉ์ด ํ์ํ ์ด์ ์ ๋ํด์ ์๊ฐํด๋ณด์.
์นํฉ์ ํ์์ฑ
1) Network์ request๊ฐ ๊ฐ์ํ๋ค -> ์นํฉ์ ์ฌ์ฉํ์ง ์์ ๋ ๋ธ๋ผ์ฐ์ ๋ ๊ทธ ๋์์ด css๋ pngํ์ผ์ด๋ javascriptํ์ผ์ด๋ ์ฌ๋ฌ๊ฐ์ request๋ฅผ ๋ณด๋ธ๋ค. ์ด๋ ์๋ฒ ๋ก๋ฉ์๊ฐ์ ์ฐ๊ฒฐ๋๋ฉฐ ์ฌ์ฉํ ๋์ ์ฌ์ฉํ์ง ์์ ๋ ํฐ ์ฐจ์ด๊ฐ ๋ํ๋๋ค.
2) ํ์ผ ๋จ์๋ก ๋ณ์๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค -> ํ๋์ htmlํ์ผ ๋ด๋ถ์์ ์ฌ๋ฌ๊ฐ์ง์ script๋ฅผ ๊ฐ์ง๊ณ ์จ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
scriptํ์ผ์์ ๋ถ๋ฌ์จ ๋ณ์๋ค์ ๋ฌด์ํ ๋ง์ ๊ฒ์ด๊ณ ์ด๋ค ๋ด๋ถ์ ๋ณ์์ด๋ฆ์ด ๊ฐ๋ค๋ฉด ๊ฐ๋ฐ์์ ์๋๋ก ์คํํ ์ ์๋ค.
์นํฉ์ script๋ฅผ ์ง์ ์ ์ผ๋ก ๋ถ๋ฌ์ค๋ ๊ฒ ์๋๊ธฐ ๋๋ฌธ์ ๋ค์์คํ์ด์ค๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
3) ์น ๊ฐ๋ฐ ์์ ์ ์๋ํ -> ์น ๊ฐ๋ฐ์ ์ฐ์ด๋ ์์๋ค์ ์์ถํด์ฃผ๋ ๋ก์ง์ ์์ฒด์ ์ผ๋ก ๊ฐ๊ณ ์๋ค. ์ด๋ ์ฑ๋ฅํฅ์์ ๋์ ๊ธฐ์ฌ๋ฅผ ํ๋ค.
์นํฉ์ ์ฌ์ฉํ๊ธฐ์ ์ ์ฌ์ ์์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. webpack๊ณผ webpack-cli ์ค์น
2. npm init -y //๊ธฐ๋ณธ๊ฐ์ผ๋ก package.json ์์ฑ
3. webpack.config.jsํ์ผ ์์ฑ.
์นํฉ์ ํฐ ํ์ 4๊ฐ์ง๋ก ๋๋๋ค.
entry, output, loader, plugin
๋จผ์ ์๋ ์ฝ๋๋ฅผ ์ดํด๋ณด์.
var path = require('path'); //---------1
var MiniCssExtractPlugin = require("mini-css-extract-plugin"); //---------2
module.exports = { //-----------3
mode: 'none', //-----------4
entry: './index.js', //------------5
output: { //--------------6
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: { //-------------7
rules: [
{
test: /\.css$/,
use: [
{ loader: MiniCssExtractPlugin.loader },
"css-loader"
]
}
]
},
plugins: [ //------------8
new MiniCssExtractPlugin() //-------------9
],
}
1๋ฒ : Path๋ NodeJs์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ์ด๋ฅผ ํตํด ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก์์ ์ ๋ํด Utility๋ฅผ ์ ๊ณตํ๋ค.
2๋ฒ : ์ฌ์ ์ npm i mini-css-extract-plugin์ ํตํด์ require๋ฅผ ํตํด ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์ด ํ๋ฌ๊ทธ์ธ์ ๋ฒ๋ค์์ ์ ํ๊ณ ๋ง์ง๋ง๋จ๊ณ์์ cssํ์ผ์ ๋ถ๋ฆฌํด์ฃผ๋ ํ๋ฌ๊ทธ์ธ์ด๋ค. ํ๋ฌ๊ทธ์ธ์ ๋ํ ์ ๋ณด๋ 8๋ฒ์ ์ถ๊ฐ๋ก ์งํ.
3๋ฒ : ์นํฉ์ ์ค์ ํ๋ ๋ถ๋ถ
4๋ฒ : mode๋ ์ด 3๊ฐ์ง๋ก ๋๋๋ค. none, production, development. ๋์ฌ๊ฒจ๋ณผ ๊ฒ์ production๊ณผ development์ธ๋ฐ production์ ๋ฐฐํฌ๋ฅผ ํ ์ ์ฌ์ฉํ๋ ๋ชจ๋์ด๋ค. ์ด๋ "๋ฒ๋ค์ ์ต์ํ ๋ฐ ๊ฐ๋ฒผ์ด ์์ค๋งต๊ณผ ์ ์ ์ต์ ํ๋ฅผ ์ด์ "์ผ๋ก ๋ณ๊ฒฝ๋๋ ๊ฒ์ด๊ณ development๋ ๊ฐ๋ฐ์ฉ์ผ๋ก "๋ผ์ด๋ธ ๋ฆฌ๋ก๋ฉ" ์ฆ ์๋๋ฅผ ์ด์ ์ผ๋ก ๊ธฐ๋ฅ์ ์ํ๊ธฐ์ ๊ฐ๊ฐ ์งํฅํ๋ ๋ฐ๊ฐ ๋ค๋ฅด๋ค.
5๋ฒ : entry๋ ์ง์ ์ ์ผ๋ก ์นํฉ์ ์์๋ถ๋ถ์ด๋ค. ์ค์ ํด๋์ entry๋ก ์ง์ ํด ์นํฉ์ด ์์ฒด์ ์ผ๋ก ํ์ผ๋ค์ ๋ฒ๋ค๋งํ๋ ๊ฒ์ด๋ค. entry๋ ์ฌ๋ฌ๊ฐ๊ฐ ๋ ์ ์๋ค.
6๋ฒ : output์ ๋ฒ๋ค๋ง์์ ์ ๋ง์น ์ถ๋ ฅํ์ผ์ด๋ค. ์ด ํ์ผ ๋ด๋ถ์๋ ๋ฒ๋ค๋งํ ์ฝ๋๊ฐ ์ ๋ถ ์ ํ์๋ค.
7๋ฒ : module์ loader๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ loader๋ค์ ๋ํ ๊ท์น๋ค์ ์ ์ํ ์ ์๋ ๊ณณ์ด๋ค. ๊ทธ๋ผ loader๋ ์ด๋ค ์ญํ ์ ํ ๊น?
์์๋ก css-loader๋ cssํ์ผ์ jsํ์ผ๋ก ๋ฃ๋ ์์ ์ ํด์ฃผ๊ณ , Mini-css-extract-loader๋ 2๋ฒ์์ ์ธ๊ธํ๋ฐ์ ๊ฐ์ด ๋ง์ง๋ง๋จ๊ณ์์ cssํ์ผ์ ๋ถ๋ฆฌํด์ฃผ๋ ์์ ์ ํ๋ค.
8๋ฒ : ํ๋ฌ๊ทธ์ธ์ ๋ฒ๋ค๋ง ์์ ์ ๋ง์น๊ณ ๋ง์ง๋ง๋จ๊ณ์์ ์นํฉ์ด ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ํด์ค์ ์๋ ๋๊ตฌ. ๊ฐ์ฒด๋ฅผ ์ ์ํด ์ฌ์ฉํ๋ค.
ํ๋ฌ๊ทธ์ธ๊ณผ ๋ก๋์ ์ฐจ์ด์ ์ ๋ญ๊น?
ํ๋ฌ๊ทธ์ธ์ ํด๋น ๊ฒฐ๊ณผ๋ฌผ์ ํํ๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ด๊ณ ๋ก๋๋ ํ์ผ์ ํด์ํ๊ณ ๋ณํํ๋ ๊ณผ์ ์ ์ฐธ์ฌํ๋ ๊ฒ์ด๋ค.