์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- callback
- sql
- promise
- mysql
- ๋น๋๊ธฐ
- https://m.blog.naver.com/tt2t2am1118/221010125300
- JS #ํ๋ก์ ํธ
- await
- prj
- Import
- ๊ฒ์
- slow and steady
- https://youtube.com/playlist?list=PLuHgQVnccGMA5836CvWfieEQy0T0ov6Jh&si=FTaYv8m21EhO-A2K
- db
- Project
- ๋๊ธฐ
- eport
- database
- object
- ํผํ
- json
- setTimeout()
- js
- ์ฐธ๊ณ ๋ธ๋ก๊ทธ
- webpack
- addEventListener
- Porject
- ajax
- execCommand
- async
- Today
- Total
C-log
๐งWebpack : Plugin ๋ณธ๋ฌธ
ํ๋ฌ๊ทธ์ธ์ ๋ฒ๋ค๋ ๊ฒฐ๊ณผ ํ๋๋ง์ ์ฒ๋ฆฌํ๋ค. ๋ฒ๋ค๋ js๋ฅผ ๋๋ ํ ํ๋ค๊ฑฐ๋ ํน์ ํ ์คํธ๋ฅผ ์ถ์ถํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
My-Webpack-Plugin
class MyWebpackPlugin {
apply(compiler) {
compiler.hooks.done.tap('MyWebpackPlugin', stats => {
console.log('MyPlugin: done');
})
}
}
module.exports = MyWebpackPlugin;
์์ ๊ฐ์ด ํ๋ฌ๊ทธ์ธ์ ์ปค์คํ ํ ์ ์๋ค.
1. class MyWebpackPlugin : Webpack ํ๋ฌ๊ทธ์ธ์ ์ผ๋ฐ์ ์ผ๋ก ํด๋์ค ํํ๋ก ์ ์ํด์ผ ๋๋ค.
2. apply(compiler) { ... } : Webpack ํ๋ฌ๊ทธ์ธ์ apply ๋ฉ์๋๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค. apply ๋ฉ์๋๋ Webpack์ด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ๋ ํธ์ถ๋๋ฉฐ ์ด ๋ฉ์๋๋ Webpack์ compiler ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์ ์ปดํ์ผ๋ฌ์ ๋น๋ ํ๋ก์ธ์ค ์ค ๋ฐ์ํ๋ ์ฌ๋ฌ ์ด๋ฒคํธ์ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋ค.
3. compiler.hooks.done.tap('MyWebpackPlugin', stats => { ... }) : ์ด ์ค์ Webpack์ done ํ (hook)์ ์ฌ์ฉํ์ฌ ๋น๋๊ฐ ์๋ฃ๋ ํ ์คํ๋๋ ์์ ์ ์ ์ํ๋ค.
- compiler.hooks.done: Webpack์ done ํ ์ ์ปดํ์ผ์ด ์๋ฃ๋์์ ๋ ์คํ๋๋ค.
- tap('MyWebpackPlugin', stats => { ... }): ์ด ๋ฉ์๋๋ ํน์ ํ
์ ํจ์๋ฅผ ๋ฑ๋ก(tap)ํ๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ ํ๋ฌ๊ทธ์ธ์ ์ด๋ฆ์ด๋ฉฐ ๋ ๋ฒ์งธ ์ธ์๋ ๋น๋๊ฐ ์๋ฃ๋ ํ ์คํ๋ ์ฝ๋ฐฑ ํจ์์
๋๋ค.
- 'MyWebpackPlugin': ๋ฑ๋ก๋ ํจ์์ ์ด๋ฆ์ผ๋ก, ๋๋ฒ๊น ๋ฐ ๋ก๊น ์ ์ ์ฉํ๋ค.
- stats => { ... }: ์ฝ๋ฐฑ ํจ์๋ก, stats ๊ฐ์ฒด๋ ์ปดํ์ผ ๊ฒฐ๊ณผ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค. ์ด ํจ์๋ ๋น๋๊ฐ ์๋ฃ๋ ํ ์คํ๋๋ค.
Plugin์ด ๋ฒ๋ค ๊ฒฐ๊ณผ์ ์ ๊ทผํ ์ ์๋ ์ด์ ๋ ์นํฉ ๋ด์ฅ ํ๋ฌ๊ทธ์ธ์ธ BannerPlugin์ ํตํด์ ์ ๊ทผํ ์ ์๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ฐธ์กฐํด์ ์ฝ๋๋ฅผ ๋ค์ ์ปค์คํ ํด๋ณด์.
class MyWebpackPlugin {
apply(compiler) {
compiler.plugin('emit', (compilation, callback) => {
const source = compilation.assets['main.js'].source();
console.log(source);
// compilation.assets['main.js'].source = () => {
// const banner = [
// '/**',
// ' * ์ด๊ฒ์ BannerPlugin์ด ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ์
๋๋ค.',
// ' * Build Date: 2019-10-10',
// ' */'
// ].join('\n');
// return banner + '\n\n' + source;
// }
callback();
})
}
}
module.exports = MyWebpackPlugin;
์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ณ build๋ฅผ ํ๊ฒ ๋๋ฉด error๊ฐ ๋ฐ์ํ๋ค. ๊ทธ ์ด์ ๋ `compiler.plugin`์ด๋ผ๋ ๋ช ๋ น์ด๊ฐ webpack5์์๋ ์ฌ์ฉ๋์ง ์๊ณ ์ญ์ ๊ฐ ๋์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด webpack5๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฐ๋ฅธ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
class MyWebpackPlugin {
apply(compiler) {
compiler.hooks.emit.tapAsync('MyPlugin', (compilation, callback) => {
const source = compilation.assets['main.js'].source();
console.log(source);
// compilation.assets['main.js'].source = () => {
// const banner = [
// '/**',
// ' * ์ด๊ฒ์ BannerPlugin์ด ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ์
๋๋ค.',
// ' * Build Date: 2019-10-10',
// ' */'
// ].join('\n');
// return banner + '\n\n' + source;
// }
callback();
})
}
}
module.exports = MyWebpackPlugin;
`compiler.plugin` ์ด๋ผ๋ ์ฝ๋๋ฅผ ๋์ ํด์ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ `compiler.hooks.emit.tapAsync('MyPlugin', (compilation, callback)`๋ฅผ ์ด์ฉํ๋ฉด ์ ์์ ์ผ๋ก build๊ฐ ๋๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค. ์ด์ `console.log(source)`์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
/*
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ "./.yarn/__virtual__/css-loader-virtual-16d7c22a15/0/cache/css-loader-npm-6.11.0-d945f9f4c0-bb52434138.zip/node_modules/css-loader/dist/cjs.js!./src/app.css":
/*!*******************************************************************************************************************************************************************!*\
!*** ./.yarn/__virtual__/css-loader-virtual-16d7c22a15/0/cache/css-loader-npm-6.11.0-d945f9f4c0-bb52434138.zip/node_modules/css-loader/dist/cjs.js!./src/app.css ***!
\*******************************************************************************************************************************************************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__,
/* -- ์ดํ์๋ต -- */
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด build๋ main.js์ ์ผ์นํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ์ด๋ ๊ฒ BannerPlugin๊ณผ ์ ์ฌํ๊ฒ ๋์ ํ ์ ์๊ฒ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์๋ค. ์ด์ ๋ฐฉ๊ธ ์์ฑํ ์ฝ๋์์ ์ฃผ์์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋์ด ์๋ ์ฝ๋๋ฅผ ํ์ฉํด build๋ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ดํด๋ณด์. ์ฃผ์์ ์ฒ๋ฆฌํ๊ณ build๋ฅผ ํ๋ฉด ์ ์์ ์ผ๋ก build๋ ๋์ง๋ง main.js์ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฃผ์์ด ์ ์ฉ๋์ง ์์ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด์ webpack ๊ณต์๋ฌธ์๋ฅผ ์ฐพ์๊ฐ๋ณด๋ฉฐ gpt์ ํจ๊ป ์ด๋ฅผ ํด๊ฒฐ ํ๋ค. ์์ ๋ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
class MyWebpackPlugin {
apply(compiler) {
compiler.hooks.emit.tapAsync('MyWebpackPlugin', (compilation, callback) => {
console.log('This is an example plugin!');
const source = compilation.assets['main.js'].source();
const banner = ['/* This is an example plugin! */'].join('\n');
const updatedSource = banner + '\n\n' + source;
// ์์ ๋ ์์ค๋ฅผ assets์ ๋ค์ ์ค์
compilation.assets['main.js'] = {
source: () => updatedSource,
size: () => updatedSource.length
};
console.log('Banner added to main.js');
callback();// ๋น๋๊ธฐ ์์
์ด ์๋ฃ๋์์์ ์๋ฆผ
})
}
}
module.exports = MyWebpackPlugin;
์ด์ ๋ฒ์ ๋ฐฉ์์ธ return์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ฌ๋ฆฌ webpack5์์๋ key, value์ฒ๋ผ ๊ฐ์ฒดํํด์ ๊ฐ์ ๋๊ฒจ์ฃผ๋ ์ ์์ ์ผ๋ก ๋์ํ๋ ๊ฒ์ ํ์ธ ํ ์ ์์๋ค. complication์ ๊ฐ์ฒด๋ Webpack์ด ๋ชจ๋์ ๋ถ์ํ๊ณ ๋ฒ๋ค๋งํ๋ ๊ณผ์ ์์ ์ฌ์ฉ๋๋ฉฐ ๊ฐ ๋ชจ๋๊ณผ ํ์ผ์ด ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๊ณ ์ฐ๊ฒฐ๋๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
๊ฐ์ ์ปค๋ฎค๋ํฐ๋ฅผ ๋ณด๋ ๋ง์ ์๊ฐ์๋ค์ด ์ ๋ฐ์ดํธ๋ฅผ ํด๋ฌ๋ผ๊ณ ํ๊ณค ์์ง๋ง ๊ทธ ์๊ฐ์ ๊ธฐ๋ค๋ฆด ์ ์์ด์ ๊ณต์๋ฌธ์์ gpt๋ฅผ ์ฌ์ฉํด์ ์ถฉ๋ถํ ํด๊ฒฐ ํ ์ ์์๋ค. ์๋ ์ด๋ฏธ์ง๋ webpack์ด ์ ๋ฐ์ ์ผ๋ก ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ์๊ฐ์ ์ผ๋ก ํ๊ธฐํด๋ณธ ์ด๋ฏธ์ง์ด๋ค. ๋ช๋ช ์ ๋ณด๋ค์ ๋นผ๋๊ธด ํ์ง๋ง ์ด๋ค ๋๋์ธ์ง ์ ๊ฒ์ด๋ค.
'โ๏ธReact > ๐งFront-Dev-Environment' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐งWebpack : Babel (0) | 2024.08.24 |
---|---|
๐งWebpack : ์์ฃผ ์ฌ์ฉ๋๋ Plugin (0) | 2024.08.20 |
๐งWebpack : url-loader (0) | 2024.07.19 |
๐งWebpack : file-loader (0) | 2024.07.17 |
๐งWebpack : css-loader, style-loader (0) | 2024.07.17 |