h e 1 1 o !
๋ฒ๋ค๋ง&์นํฉ / ์นํฉ์ ํต์ฌ ๊ฐ๋ ๋ณธ๋ฌธ
๐ ์นํฉ์ ํต์ฌ ๊ฐ๋
- Entry
- Output
- Loaders
- Plugins
- Mode
- Browser Compatibility
๐ webpack์ config ํ์ผ ์์
module.exports = {
target: ["web", "es5"], //
entry: "./src/script.js", //
output: { //
path: path.resolve(__dirname, "docs"),
filename: "app.bundle.js",
clean: true
},
module: {
rules: [
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, "css-loader"], //
exclude: /node_modules/,
},
],
},
plugins: [ //
new HtmlWebpackPlugin({
template: path.resolve(__dirname, "src", "index.html"),
}),
new MiniCssExtractPlugin(),
],
optimization: { //
minimizer: [
new CssMinimizerPlugin(),
]
}
};
๐ Target
Webpack์ ๋ค์ํ ํ๊ฒฝ๊ณผ target์ ์ปดํ์ผํฉ๋๋ค. target์ ๊ธฐ๋ณธ๊ฐ์ web์ ๋๋ค. ์ ์ฉํ์ง ์์ผ๋ฉด ์ด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ ์ฉ๋๋ค. ์ด ๋ถ๋ถ์๋ web ์ธ์๋ ๋ค์ํ ํ๊ฒฝ์ ์ปดํ์ผ ํ ์ ์๋๋ฐ, esX๋ฅผ ๋ฃ์ผ๋ฉด ์ง์ ๋ ECMAScript ๋ฒ์ ์ผ๋ก ์ปดํ์ผํ ์ ์๋ค.
module.exports = {
target: ["web", "es5"],
};
ํด๋น config ํ์ผ์์๋ es5๋ฅผ ๋ฐฐ์ด ์์ ๋ฃ์๋ค. ๋ฐ๋ผ์ ์ด config ํ์ผ์ ๋ธ๋ผ์ฐ์ ์ ๋์ผํ ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ ์ํ์ฌ ์ปดํ์ผํ ๊ฒ์ด๋ฉฐ, ์์ฑ๋ ์ฝ๋๋ฅผ es5 ๋ฒ์ ์ผ๋ก ์ปดํ์ผ ํ๊ฒ ๋ค๊ณ ์ง์ ํ ๊ฒ์์ ์ ์ ์๋ค. Browser Compatibility์ ์ฐ๊ด๋ ์์ฑ์ผ๋ก ๋ณผ ์ ์๋ค.
Browser Compatibility
The term browser compatibility refers to the ability of a certain website to appear fully functional on different browsers that are available in the market. This means that the website's HTML coding, as well as the scripts on that website, should be compatible to run on the browsers.
์ปดํ์ผ์ด๋?
๊ณ ๊ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ง๋ ํ๋ก๊ทธ๋จ์ ์ค์ ์ปดํจํฐ์์ ์คํํ ์ ์๋ ๊ธฐ๊ณ์ด, ์ค๊ฐ ์ฝ๋, ๋๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ฒ์ญํ๋ ๊ฒ์ ๋ปํ๋ค.
๐ Entry
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋์ “์์์ ". React๋ index.js์์ HTML ์๋ฆฌ๋จผํธ ํ๋์ React ์ฝ๋๋ฅผ ์ ์ฉํ๋ ๊ฒ ๋ถํฐ ์์ํ๋ค. (์ค์ webpack์ ์ฌ์ฉํ๊ธฐ๋ ํ์ต๋๋ค.)
Entry ์์ฑ์ Entry point๋ผ๊ณ ๋ ํ๋ฉฐ, webpack์ด ๋ด๋ถ์ ๋ํ๋์ ๊ทธ๋ํ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉํด์ผ ํ๋ ๋ชจ๋์ด๋ค. Webpack์ ์ด Entry point๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ง๊ฐ์ ์ ์ผ๋ก ์์กดํ๋ ๋ค๋ฅธ ๋ชจ๋๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์๋ผ ์ ์๋ค.
//๊ธฐ๋ณธ ๊ฐ
module.exports = {
...
entry: "./src/index.js",
};
//์ง์ ๊ฐ
module.exports = {
...
entry: "./src/script.js",
};
๊ธฐ๋ณธ ๊ฐ์ ./src/index.js์ด์ง๋ง webpack ์ค์ ์์ ์ด๋ฐ ์์ผ๋ก Entry ์์ฑ์ ์ค์ ํ์ฌ ๋ค๋ฅธ (๋๋ ์ฌ๋ฌ entry point)๋ฅผ ์ง์ ํ ์ ์๋ค.
๐ Output
Output ์์ฑ์ ์์ฑ๋ ๋ฒ๋ค์ ๋ด๋ณด๋ผ ์์น์ ์ด ํ์ผ์ ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ webpack์ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
const path = require('path');
module.exports = {
...
output: {
path: path.resolve(__dirname, "docs"), // ์ ๋ ๊ฒฝ๋ก๋ก ์ค์ ์ ํด์ผ ํฉ๋๋ค.
filename: "app.bundle.js",
clean: true
},
};
๊ธฐ๋ณธ ์ถ๋ ฅ ํ์ผ์ ๊ฒฝ์ฐ์๋ ./dist/main.js๋ก, ์์ฑ๋ ๊ธฐํ ํ์ผ์ ๊ฒฝ์ฐ์๋ ./dist ํด๋๋ก ์ค์ ๋๋ค. ์์ ์์ ์์๋ output.filename๊ณผ output.path ์์ฑ์ ์ฌ์ฉํ์ฌ webpack์ ๋ฒ๋ค์ ์ด๋ฆ๊ณผ ๋ด๋ณด๋ผ ์์น๋ฅผ ์๋ ค์ฃผ๊ณ ์๋ค. path ์์ฑ์ ์ฌ์ฉํ ๋๋ path ๋ชจ๋์ ์ฌ์ฉํด์ผ๋ง ํ๋ค.
๐ Loader
Webpack์ ๊ธฐ๋ณธ์ ์ผ๋ก JavaScript์ JSON ํ์ผ๋ง ์ดํดํ๋ค. ๊ทธ๋ฌ๋ loader๋ฅผ ์ฌ์ฉํ๋ฉด Webpack์ด ๋ค๋ฅธ ์ ํ์ ํ์ผ์ ์ฒ๋ฆฌํ๊ฑฐ๋, ๊ทธ๋ค์ ์ ํจํ ๋ชจ๋๋ก ๋ณํํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ํ๋์ ๊ทธ๋ํ์ ์ถ๊ฐํ ์ ์๋ค.
module.exports = {
...
module: {
rules: [
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, "css-loader"],
exclude: /node_modules/,
},
],
},
};
์์ ์์ค์์ loader๋ webpack ์ค์ ์ ๋ช ๊ฐ์ง ์์ฑ์ด ์๋ค.
- test: ๋ณํ์ด ํ์ํ ํ์ผ๋ค์ ์๋ณํ๊ธฐ ์ํ ์์ฑ
- use: ๋ณํ์ ์ํํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ก๋๋ฅผ ๊ฐ๋ฆฌํค๋ ์์ฑ
- exclude: ๋ฐ๋ฒจ๋ก ์ปดํ์ผํ์ง ์์ ํ์ผ์ด๋ ํด๋๋ฅผ ์ง์ . (๋ฐ๋๋ก include ์์ฑ์ ์ด์ฉํด ๋ฐ๋์ ์ปดํ์ผํด์ผ ํ ํ์ผ์ด๋ ํด๋ ์ง์ ๊ฐ๋ฅ)
์ฌ๊ธฐ์ test์ use ์์ฑ์ ํ์ ์์ฑ์ด๋ค. ์ด๋ฐ ์์ฑ์ ๋ฃ์ด ๊ท์น์ ์ ํ๊ธฐ ์ํด์๋ module.rules ์๋์ ์ ์ํด์ผ ํ๋ค. ๊ทธ๋ฅ rules ์๋์ ์ ์ํ๋ฉด webpack์ ๊ฒฝ๊ณ ๋ฅผ ํ๋ค.
๐ Plugins
Plugins๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒ๋ค์ ์ต์ ํํ๊ฑฐ๋ ์์ ์ ๊ด๋ฆฌํ๊ณ , ํ๊ฒฝ๋ณ์ ์ฃผ์ ํ๋ ๋ฑ, ๊ด๋ฒ์ํ ์์ ์ ์ํํ ์ ์๋ค.
const webpack = require('webpack');
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
...
plugins: [
new HtmlWebpackPlugin({
template: path.resolve(__dirname, "src", "index.html"),
}),
new MiniCssExtractPlugin(),
],
};
ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ require()๋ฅผ ํตํด ํ๋ฌ๊ทธ์ธ์ ๋จผ์ ์์ฒญํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ plugins ๋ฐฐ์ด์ ์ฌ์ฉํ๊ณ ์ ํ๋ ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํด์ผ ํ๋ค. ๋๋ถ๋ถ์ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉ์๊ฐ ์ต์ ์ ํตํด ์ง์ ํ ์ ์๋ค. ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ํ๋ฌ๊ทธ์ธ์ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ๋๋ก ์ค์ ํ ์ ์๊ธฐ ๋๋ฌธ์ new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ํธ์ถํ์ฌ ํ๋ฌ๊ทธ์ธ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ค์ผ ํ๋ค.
์์ ์์ ์์ html-webpack-plugin ์ ์์ฑ๋ ๋ชจ๋ ๋ฒ๋ค์ ์๋์ผ๋ก ์ฝ์ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ฉ HTML ํ์ผ์ ์์ฑํด์ค๋ค. mini-css-extract-plugin์ CSS๋ฅผ ๋ณ๋์ ํ์ผ๋ก ์ถ์ถํด CSS๋ฅผ ํฌํจํ๋ JS ํ์ผ ๋น CSS ํ์ผ์ ์์ฑํด์ฃผ๊ฒ๋ ์ง์ํ๋ค.
๐ Optimization
Webpack์ ๋ฒ์ 4๋ถํฐ๋ ์ ํํ ํญ๋ชฉ์ ๋ฐ๋ผ ์ต์ ํ๋ฅผ ์คํํ๋ค.
module.exports = {
...
optimization: {
minimizer: [
new CssMinimizerPlugin(),
]
}
};
์ต์ ํํ๊ธฐ ์ํด ๋ค์ํ ์ต์ ์ด ์ง์์ด ๋๋๋ฐ, ๋ํ์ ์ผ๋ก minimize์ minimizer ๋ฑ์ ์ฌ์ฉํ๋ค.
- minimize : TerserPlugin ๋๋ optimization.minimize์ ๋ช ์๋ plugins๋ก bundle ํ์ผ์ ์ต์ํ(=์์ถ)์ํค๋ ์์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์
- minimizer : defualt minimizer์ ์ปค์คํ ๋ TerserPlugin ์ธ์คํด์ค๋ฅผ ์ ๊ณตํด์ ์ฌ์ ์ํ ์ ์์ต๋๋ค.
์์ ์์ ์์๋ mini-css-extract-plugin ์ ๊ด๋ จ๋ ๋ฒ๋ค์ ์ต์ํํ๋๋ก ์ง์ํ๊ณ ์๋ค.
์ถ์ฒ
์ฝ๋์คํ ์ด์ธ
https://urclass.codestates.com/content/cc9ff40a-3d8a-4bd9-a99e-f80971e41fea?playlist=2376
'p r o g r a m m i n g' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฒ๋ค๋ง & ์นํฉ (0) | 2022.07.25 |
---|---|
git ์ค๋ฅ / gitignore (0) | 2022.07.11 |
chunk, buffer (0) | 2022.06.16 |
Effect Hook (3) | 2022.06.14 |
REST API ์ฑ์๋ ๋ชจ๋ธ(RMM), Open API์ API Key (0) | 2022.06.10 |