์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- db
- ์ฐธ๊ณ ๋ธ๋ก๊ทธ
- execCommand
- webpack
- object
- ๊ฒ์
- Import
- https://youtube.com/playlist?list=PLuHgQVnccGMA5836CvWfieEQy0T0ov6Jh&si=FTaYv8m21EhO-A2K
- await
- slow and steady
- addEventListener
- ํผํ
- https://m.blog.naver.com/tt2t2am1118/221010125300
- json
- database
- async
- setTimeout()
- prj
- mysql
- sql
- ๋๊ธฐ
- Project
- promise
- Porject
- ๋น๋๊ธฐ
- callback
- ajax
- JS #ํ๋ก์ ํธ
- js
- eport
- Today
- Total
C-log
๐งWebpack : url-loader ๋ณธ๋ฌธ
url-loader์ ์ญํ ์ ์ด๋ฏธ์ง๋ฅผ base-64๋ก ์ธ์ฝ๋ฉํด์ ๋ฌธ์์ด ํํ๋ก ์ด๋ฏธ์ง ์์ค์ ๋ฃ๋ ์ญํ ์ ํ๋ค. ์ด๋ฌํ ์ฒ๋ฆฌ๋ฅผ url-loader๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค. ์ฌ์ฉํ๋ ์ด๋ฏธ์ง๊ฐ ๋ง์์ง ๋ ๋คํธ์ํฌ์์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ด์ด ์๊ณ ์๋น์ค ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ฐธ๊ณ ๋ก ์์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ค๋ฉด Data URI Scheme์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋ซ๋ค.
file-loader : 2
ํ์ฌ ์์ฑ์์ webpack ํ๊ฒฝ์ ์๋ค์ํผ webpack 5์ด๋ค. ์ด์ ๋ฐ๋ผ file-loader๋ url-loader๋ ์ด๋ฏธ assets/resource์ ๋ด์ฅ์ด ๋์ด ์์ด์ ์์ ์์ ์ฒ๋ผ ๋ฐ๋ก ์ค์ ํ ํ์๋ ์๋ค. ๋ค๋ง webpack.config์ ์ง๋๋ฒ๊ณผ ๊ฐ์ ํ์๊ณผ ํํ๋ฅผ ์ ์งํ์ง๋ง png๋ฅผ ์ ์ธํ ๋๋จธ์ง ํฌ๋ฉง๋ ์ค์ ํด์ผ ํ๊ธฐ์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ ํด์ฃผ๋ฉด ๋๋ค.
// webpack.config.js (5 ๋ฒ์ ์ด์)
{
test: /\.(png|jpg|gif|svg)$/,
type: 'asset/resource',
generator: {
publicPath: './dist/',
filename: 'assets/[name].[ext]?[hash]',
},
}
์ด์ ๊ณผ ๋ณ๊ฒฝ๋๊ฒ ์๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ hash๊ฐ์ผ๋ก ๋ณํ์ด ๋ ํ์ผ์ ํ์ธํ๊ธฐ ์ํด์ [name].[hash][ext] ์ด์ ๊ฐ์ด ์์ฑ์ ํ๋ค. ํ์ง๋ง ์ด๋ฒ์ [name].[ext]?[hash]๊ณผ ๊ฐ์ด ์์ฑ์ ํ๋ค. ์ด ๋์ ์ฐจ์ด๋ ์๋์ ๊ฐ๋ค.
- [name].[hash][ext] / ๊ฒฐ๊ณผ ํ์ผ ์ด๋ฆ: example.1234567890abcdef.png
- [name].[ext]?[hash] / ๊ฒฐ๊ณผ ํ์ผ ์ด๋ฆ: example.png
?1234567890abcdef
๊ฐ ์์๋ค์ ์ค๋ช ์ ์๋์ ๊ฐ๋ค.
- [name]: ์๋ณธ ํ์ผ์ ์ด๋ฆ์ ์๋ฏธํฉ๋๋ค.
- [ext]: ์๋ณธ ํ์ผ์ ํ์ฅ์๋ฅผ ์๋ฏธํฉ๋๋ค.
- [hash]: ํ์ผ ๋ด์ฉ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ํด์ ๊ฐ์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด '?'๋ ๋ฌด์จ ์๋ฏธ์ธ๊ฐ ์ฐ์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ํ์ ๊ธฐ๋ฒ์ด์ง๋ง webpack 5์ด์๋ถํฐ๋ ์ด๋ฅผ ์ง์ ํ์ง ์์์ '?'๋ถํฐ ์ผ์ ๋ฌด์๋ฅผ ํ๋ค. ์ด์ ๋ฐ๋ผ์ ์๋ณธ ํ์ผ๋ช ์ผ๋ก dist ํด๋์ ์ ์ฅ์ด๋๋ ๊ฒ์ด๋ค. ๊ฐ๊ธฐ ๋ ํ์์ผ๋กค buildํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
[name].[hash][ext]
dist
โโโ assets
โ โโโ git-logo-icon.e6cb70b6c44cc2e8835a.png
โ โโโ npm-icon.1c616bc0f7d12cf5f824.png
โ
โโโ main.js
[name].[ext][hash]
dist
โโโ assets
โ โโโ git-logo-icon..pnge6cb70b6c44cc2e8835a
โ โโโ npm-icon..png1c616bc0f7d12cf5f824
โ
โโโ main.js
[name].[ext]?[hash]
dist
โโโ assets
โ โโโ git-logo-icon.png
โ โโโ npm-icon.png
โ
โโโ main.js
์ค๊ฐ ์ ๊ฒ์ผ๋ก ๋์ pcakge.json ํ์ผ์ ์ดํด๋ณด๋ฉด file-loader, url-loader๋ ํ์ฌ ์๋ค. ๋ฌผ๋ก yarn install๋ ํด์ฃผ์๋ค.
// package.json
"devDependencies": {
"webpack": "^5.75.0",
"webpack-cli": "^4.10.0"
},
"dependencies": {
"css-loader": "^6.7.1",
"style-loader": "^3.3.1"
}
๋ง์ฐฌ๊ฐ์ง๋ก yarn run build๋ฅผ ํด์ฃผ๋ฉด ์ build ๋ ๊ฒ์ ๋ณผ ์๊ฐ ์๋ค.
url-loader
์์ ์์๋ webpack 5 ์ดํ ๋ฒ์ ์ด๋ผ์ limit์ ์ฌ์ฉ ํ ์ ์์ง๋ง webpack 5์ด์ ๋ถํฐ๋ ์ ํ ๋ค๋ฅด๊ฒ ์ด๋ฏธ์ง ํฌ๊ธฐ ํ์ผ์ ์ ํ ํ ์ ์๋ค. ์๋์ ๋น๊ตํด๋ณด๋ฉด์ ์ดํด๋ณด์.
// webpack.config.js (5 ๋ฒ์ ์ดํ)
{
test: /\.(png|jpg|gif|svg)$/,
loader: 'url-loader',
options: {
publicPath: './dist/',
name: '[name].[ext]?[hash]',
limit: 2000, // 2KB
}
},
// webpack.config.js (5 ๋ฒ์ ์ด์)
{
test: /\.(png|jpg|gif|svg)$/,
type: 'asset/resource',
generator: {
publicPath: './dist/',
filename: 'assets/[name].[ext]?[hash]',
},
dependency: { not: ['url'] },
parser: {
dataUrlCondition: {
maxSize: 20000, // 2KB
},
},
}
์์ ๊ฐ์ด ์ค์ ํ๊ณ yarn run build๋ฅผ ํ๊ธฐ ์ ํ์ฌ ๋์ ์ด๋ฏธ์ง ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ดํด๋ณด๊ธฐ ์ํด์ ์๋์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ํตํด์ ํ์ธํ ์ ์๋ค.
::CMD : ls -l src
-rw-r--r-- 1 rxxxxxxxx 197121 88 -์ 17 21:21 app.css
-rw-r--r-- 1 rxxxxxxxx 197121 305 -์ 19 01:15 app.js
drwxr-xr-x 1 rxxxxxxxx 197121 0 -์ 17 20:11 css
-rw-r--r-- 1 rxxxxxxxx 197121 7040 -์ 12 23:35 git-logo-icon.png
-rw-r--r-- 1 rxxxxxxxx 197121 47 -์ 17 22:49 math.js
-rw-r--r-- 1 rxxxxxxxx 197121 32816 -์ 24 18:35 npm-icon.png
์ด์ dist ํด๋์ ๊ฒฐ๊ณผ๋ฅผ ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
dist
โโโ assets
โ โโโ npm-icon..png
โ
โโโ e6cb70b6c44cc2e8835a.png
โโโ main.js
๋ธ๋ผ์ฐ์ ์ ๊ฒฐ๊ณผ๋ ์ธ๋ผ์ธ(assets)์ ํฌํจ ๋์ง ์์ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ๋ ๋๋ง ํ๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ์ ํ ํ ์ ์๋ ๋ฐฉ๋ฒ ๋ณ๋๋ก ํ์ผ์ ์ ํ ํ ์ ์๋ jsํ์ผ์ ๋ง๋ค์ด์ path.resolve๋ฅผ ํตํด์ ํด๋น ์ด๋ฏธ์ง๋ฅผ ๊ฑธ๋ฌ ๋ผ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค.
์ฐธ๊ณ ๋ก 'dependency: { not: ['url'] }' ์ค์ ์ URL ํธ์ถ๋ก ์ธํด ๋ฐ์ํ ์ ์
์ ๋ํด file-loader ๊ท์น์ ์ ์ฉํ์ง ์๋๋ค. ์ฆ, import 'https://example.com/image.png';์ ๊ฐ์ด URL์์ ๊ฐ์ ธ์ค๋ ์ด๋ฏธ์ง๋ ์ด ๋ก๋ ๊ท์น์ ์ ์ฉ์ ๋ฐ์ง ์๋๋ค.
(ํ์ธ ์ค...) file-loader์ url-loader๋ฅผ ์ฌ์ฉ ํ๋ ๋ฐฉ์์ด๋ค. webpack 5์์ asset/resoucre๋ฅผ ์ฌ์ฉํด์ ์ด์ ๋ฒ์ ๊ณผ ๋ฌ๋ฆฌ url-loader์ file-loader๋ฅผ ๋ฐ๋ก ์ค์ ํ์ง ์์๋ ๋๋ ํธ๋ฆฌ์ฑ์ ์์ง๋ง ํ์ฌ ์์ ์ฒ๋ผ limit์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์๋ ์ฝ๋์ ๊ฐ์ด ์ ์ฉ์ ํ๋ฉด ๋๋ค. ํ์ง๋ง ์๊ฐํ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ ์ ๋์ํ์ง ์๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค. ์๋ง file-loader ๋ฐฉ์๊ณผ url-loader ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์๋ค. import ๋ฐฉ์๊ณผ css์์ url๋ก ํธ์ถ ํ๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์์ ๊ฒ์ด๋ค.
{
test: /\.(png|jpg|gif|svg)$/i,
type: 'asset/resource',
generator: {
publicPath: './dist/',
filename: 'assets/[name].[ext]?[hash]',
},
dependency: { not: ['url'] },
use: [
{
loader: 'url-loader',
options: {
limit: 8192,
},
},
],
},
์กฐ๊ธ ๋ ๋ถ์ํด ๋ณผ ํ์๊ฐ ์๋ค. url-loader์ file-loader์ ์ฐจ์ด๋ฅผ ์ข ๋ ๋ช ํํ๊ฒ ์ดํด๋ณผ ํ์๊ฐ ์๊ณ webpack 5์์ base-64๋ก ์ธ์ฝ๋ฉ ๋๋ ๊ฒ๊ณผ url๋ก ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ข ๋ ์ฐพ์์ ๊ณต๋ถํด๋ณผ ํ์๊ฐ ์๋ค. ๋ง์ด ์์ฌ์ด ๋ถ๋ถ ์ด์ง๋ง ๋ง์ ์๋๋ก ๋๋ต์ ์ธ ์นํฉ์ ์ด๋ฏธ์ง์ฒ๋ฆฌ ๋ฐฉ์์ ๋ง ๋ณผ ์ ์์๋ค.
REFERENCE
'โ๏ธReact > ๐งFront-Dev-Environment' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐งWebpack : ์์ฃผ ์ฌ์ฉ๋๋ Plugin (0) | 2024.08.20 |
---|---|
๐งWebpack : Plugin (0) | 2024.08.20 |
๐งWebpack : file-loader (0) | 2024.07.17 |
๐งWebpack : css-loader, style-loader (0) | 2024.07.17 |
๐งWebpack : Loader (0) | 2024.06.23 |