250x250
Rainbow๐ŸŒˆCoder
My dev Note๐Ÿ“’
Rainbow๐ŸŒˆCoder
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (411)
    • ๊ณต์ง€์‚ฌํ•ญ (0)
    • Debugger (10)
      • Visual Studio Debugger (1)
      • Chrome DevTools (3)
      • Visual Studio Code Debugger (4)
      • eclipse (1)
      • intelliJ (1)
    • OOP (2)
      • OOP (2)
    • TypeScript (54)
      • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ TypeScript (54)
    • Javascript (87)
      • Javascript (45)
      • Node.js (19)
      • React (5)
      • FE ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ค์ • (3)
      • React์™€ Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ (6)
      • next.js (2)
      • pixi.js (7)
    • ๋งˆํฌ์—… (23)
      • Html & Css (23)
    • C# (80)
      • C# (12)
      • ์ด๊ฒƒ์ด C#์ด๋‹ค (68)
    • C++ (30)
      • c++ (27)
      • win api (3)
    • Unity (18)
      • Unity(๊ธฐ์ดˆ) (8)
      • Unity(C#์ค‘๊ธ‰) (5)
      • ์œ ๋‹ˆํ‹ฐ ํฌํ†ค(๋„คํŠธ์›Œํฌ) (4)
      • unity c# MyCode (1)
    • Java & Spring (29)
      • Java (11)
      • ์Šคํ”„๋ง (8)
      • Java Algorithm (9)
      • Javs Data Structures (1)
    • ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (15)
      • ์ž๋ฃŒ๊ตฌ์กฐ (5)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
    • ํ˜•์ƒ๊ด€๋ฆฌ (15)
      • Git (11)
      • ์†Œ์ŠคํŠธ๋ฆฌ (3)
    • ๊ทธ๋ž˜ํ”ฝ์Šค (7)
      • WebGl (7)
    • AWS (3)
      • aws (3)
    • ๋ฆฌ๋ˆ…์Šค (5)
      • ๋ฆฌ๋ˆ…์Šค (5)
    • ์ฑ… ๋ฆฌ๋ทฐ (13)
      • ํด๋ฆฐ์ฝ”๋“œ(์ฑ…๋ฆฌ๋ทฐ) (3)
      • ์œ ์ง€๋ณด์ˆ˜๊ฐ€๋Šฅํ•œ์ฝ”๋”ฉ์˜๊ธฐ์ˆ C#ํŽธ(์ฑ…๋ฆฌ๋ทฐ) (1)
      • ๋ฆฌํŒฉํ† ๋ง(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธํŒ) (9)
    • Server (2)
      • ๊ฒŒ์ž„ ์„œ๋ฒ„(๋„คํŠธ์›Œํฌ, ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ,OS) (2)
    • ์„ค๊ณ„, ์•„ํ‚คํ…์ณ (4)
    • ํŒŒ์ด์ฌ (5)
    • ๋””์ž์ธํŒจํ„ด (2)
    • mocha (2)
    • Jest (1)
    • Spine (1)
    • ์ธ๊ณต์ง€๋Šฅ (1)
      • ํ˜ผ์ž๊ณต๋ถ€ํ•˜๋Š”๋จธ์‹ ๋Ÿฌ๋‹+๋”ฅ๋Ÿฌ๋‹ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ์ปดํฌ์ง€์…˜
  • MySQL
  • ใ…ฃใ„ท
  • ์œ„์ž„

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Rainbow๐ŸŒˆCoder

My dev Note๐Ÿ“’

[์›นํŒฉ][๋ฐ”๋ฒจ] ํŒจํ‚ค์ง€ ์ด ์„ค์น˜
Javascript/FE ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ค์ •

[์›นํŒฉ][๋ฐ”๋ฒจ] ํŒจํ‚ค์ง€ ์ด ์„ค์น˜

2022. 5. 10. 02:50
728x90

 

๋ฒˆ๋“ค๋ง : ๋ชจ๋“  ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ๋กœ ๋ณด๊ณ , ์ด ๋ชจ๋“ˆ๋“ค์„ ๋ฐฐํฌ์šฉ์œผ๋กœ ๋ณ‘ํ•ฉํ•˜๊ณ  ํฌ์žฅํ•˜๋Š” ์ž‘์—….(์ตœ์ ํ™”๋„ ํ•ด์คŒ)

 

์ด๋Ÿฌํ•œ ๋ฒˆ๋“ค๋ง ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํˆด์„ ๋ฒˆ๋“ค๋Ÿฌ๋ผ๊ณ  ํ•œ๋‹ค.

 

ํ˜„์žฌ ์‹œ์ ์—์„œ๋Š” ๋ฒˆ๋“ค๋Ÿฌ ์ค‘์—์„œ '์›นํŒฉ'์ด ๊ฐ€์žฅ ์ธ๊ธฐ๊ฐ€ ๋งŽ๋‹ค.

 

์ฒ˜์Œ package.json ์ƒํƒœ

{
  "name": "webpack-test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "cross-env NODE_ENV=production webpack --progress",
    "start": "webpack serve --progress"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

webpack.config.js

const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const CopyWebpackPlugin = require("copy-webpack-plugin");

const webpackMode = process.env.NODE_ENV || 'development';

module.exports = {
	mode: webpackMode,
	entry: {
		main: './src/main.js',
	},
	output: {
		path: path.resolve('./dist'),
		filename: '[name].min.js'
	},
	// es5๋กœ ๋นŒ๋“œ ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์ฃผ์„ ์ œ๊ฑฐ
	// ๋‹จ, ์ด๊ฑฐ ์„ค์ •ํ•˜๋ฉด webpack-dev-server 3๋ฒˆ๋Œ€ ๋ฒ„์ „์—์„œ live reloading ๋™์ž‘ ์•ˆํ•จ
	// target: ['web', 'es5'],
	devServer: {
		liveReload: true
	},
	optimization: {
		minimizer: webpackMode === 'production' ? [
			new TerserPlugin({
				terserOptions: {
					compress: {
						drop_console: true
					}
				}
			})
		] : [],
		splitChunks: {
			chunks: 'all'
		}
	},
	module: {
		rules: [
			{
				test: /\.js$/,
				loader: 'babel-loader',
				exclude: /node_modules/
			},
			{
				test: /\.js$/,
				enforce: 'pre',
				use: ['source-map-loader'],
			}
		]
	},
	plugins: [
		new HtmlWebpackPlugin({
			template: './src/index.html',
			minify: process.env.NODE_ENV === 'production' ? {
				collapseWhitespace: true,
				removeComments: true,
			} : false
		}),
		new CleanWebpackPlugin(),
		// CopyWebpackPlugin: ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•  ํŒŒ์ผ๋“ค์„ ์„ค์ •ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ
		// ์•„๋ž˜ patterns์— ์„ค์ •ํ•œ ํŒŒ์ผ/ํด๋”๋Š” ๋นŒ๋“œ ์‹œ dist ํด๋”์— ์ž๋™ ์ƒ์„ฑ
		// patterns์— ์„ค์ •ํ•œ ๊ฒฝ๋กœ์— ํ•ด๋‹น ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ
		// ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ผ์ด๋‚˜ ํด๋” ์ด๋ฆ„์ด ๋‹ค๋ฅด๋‹ค๋ฉด ๋ณ€๊ฒฝ
		// ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ํŒŒ์ผ๋“ค์ด ์—†๋‹ค๋ฉด CopyWebpackPlugin ํ†ต์งธ ์ฃผ์„ ์ฒ˜๋ฆฌ
		new CopyWebpackPlugin({ //์—ฌ๊ธฐ์—๋Š” dist ํด๋”์— ๊ทธ๋Œ€๋กœ ๋ณต์ œ์‹œํ‚ฌ ํŒŒ์ผ๋“ค์„ ์ž‘์„ฑ
			patterns: [
				{ from: "./src/style.css", to: "./style.css" },
				{ from: "./src/images", to: "./images" },
			],
		})
	]
};

 

 

<1> ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์•„๋ž˜ <2>๋ฅผ ํ„ฐ๋ฏธ๋„์— ์ ์šฉ

JS๋งŒ ๊ฐ„๋‹จํžˆ ๋นŒ๋“œํ•˜๋Š” ์›นํŒฉ ์„ธํŒ…

1. ํŒจํ‚ค์ง€ ์„ค์น˜
npm i -D @babel/cli @babel/core @babel/preset-env babel-loader clean-webpack-plugin core-js cross-env terser-webpack-plugin webpack webpack-cli


2. ๋นŒ๋“œ(๋ฐฐํฌ์šฉ ํŒŒ์ผ ์ƒ์„ฑ) : ๊ฐœ๋ฐœ ํ›„ ์ตœ์ข… ์‹ค์ œ๋กœ ์„œ๋น„์Šคํ•  ๋ฐฐํฌ์šฉ ํŒŒ์ผ. ์‚ฌ์‹ค์ƒ ๋ฒˆ๋“ค๋ง, ์ตœ์ข… ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ์ž‘์—…
npm run build

(!)
npm run build ์‹คํ–‰ ์‹œ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค๋ฉด Node.js๋ฅผ LTS ๋ฒ„์ „(์žฅ๊ธฐ ์ง€์› ๋ฒ„์ „)์œผ๋กœ ์„ค์น˜ ํ›„ ๋‹ค์‹œ ์‹œ๋„
n lts

 

<2> ์ ์šฉ ํ›„ ๊ฒฐ๊ณผ๋Š”

 

1. ํŒจํ‚ค์ง€ ์„ค์น˜ : -D ๋Š” ๊ฐœ๋ฐœ์‹œ์—๋งŒ ์“ด๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹œ
npm i -D @babel/cli @babel/core @babel/preset-env babel-loader clean-webpack-plugin copy-webpack-plugin core-js cross-env html-webpack-plugin source-map-loader terser-webpack-plugin webpack webpack-cli webpack-dev-server


2. ๊ฐœ๋ฐœ์šฉ ์„œ๋ฒ„ ๊ตฌ๋™
npm start


3. ๋นŒ๋“œ(๋ฐฐํฌ์šฉ ํŒŒ์ผ ์ƒ์„ฑ)
npm run build


(!)
npm start ๋˜๋Š” npm run build ์‹คํ–‰ ์‹œ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค๋ฉด Node.js๋ฅผ LTS ๋ฒ„์ „(์žฅ๊ธฐ ์ง€์› ๋ฒ„์ „)์œผ๋กœ ์„ค์น˜ ํ›„ ๋‹ค์‹œ ์‹œ๋„
n lts


(!)
ERROR in unable to locate '๊ฒฝ๋กœ...'
์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, webpack.config.js์˜ CopyWebpackPlugin์— ์„ค์ •๋œ ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
CSS๋‚˜ ์ด๋ฏธ์ง€ ํด๋” ๋“ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด webpack.config.js์—์„œ CopyWebpackPlugin ๋ถ€๋ถ„ ์ „์ฒด๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌ

 

<2>์—์„œ 1 ํ„ฐ๋ฏธ๋„ ์ž…๋ ฅ ํ›„ package.json ์ƒํƒœ

{
  "name": "webpack-test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "cross-env NODE_ENV=production webpack --progress",
    "start": "webpack serve --progress"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/cli": "^7.17.10",
    "@babel/core": "^7.17.10",
    "@babel/preset-env": "^7.17.10",
    "babel-loader": "^8.2.5",
    "clean-webpack-plugin": "^4.0.0",
    "copy-webpack-plugin": "^10.2.4",
    "core-js": "^3.22.4",
    "cross-env": "^7.0.3",
    "html-webpack-plugin": "^5.5.0",
    "source-map-loader": "^3.0.1",
    "terser-webpack-plugin": "^5.3.1",
    "webpack": "^5.72.0",
    "webpack-cli": "^4.9.2",
    "webpack-dev-server": "^4.9.0"
  }
}

ํ˜‘์—…์‹œ, ์œ„ ํŒจํ‚ค์ง€ ํŒŒ์ผ๋งŒ ์žˆ๋‹ค๋ฉด

npm i๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด, ํ˜‘์—… ์ƒ๋Œ€๋ฐฉ๋„ ํŒจํ‚ค์ง€๋“ค์„ ์ž๋™ ์„ค์น˜๋ฐ›์•„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์›นํŒฉ์€ ๊ฐœ๋ฐœํ•  ๋•Œ๋งŒ ์“ฐ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— -D ์˜ต์…˜์„ ๋„ฃ์–ด์ฃผ๋„๋ก ํ•˜์ž

 

 

<2>2. ๊ฐœ๋ฐœ์šฉ ์„œ๋ฒ„ ๊ตฌ๋™ : ์ข…๋ฃŒ๋Š” ์ปจํŠธ๋กค c
npm start : ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌ๋™์ด ๋˜๋ฉด ํ„ฐ๋ฏธ๋„์— ์ฃผ์†Œ๊ฐ’์ด ๋‚˜์˜จ๋‹ค. ํ•ด๋‹น ์ฃผ์†Œ์— ๋“ค์–ด๊ฐ€๋ฉด ์›น์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
ํ†ต์ƒ src ํด๋”์— ํ”„๋กœ์ ํŠธ ํŒŒ์ผ๋“ค์„ ๋‹ด์•„ ๋‘”๋‹ค.

<3>3. ๋นŒ๋“œ(๋ฐฐํฌ์šฉ ํŒŒ์ผ ์ƒ์„ฑ)
npm run build

dist ๋ผ๋Š” ์ƒˆ๋กœ์šด ํด๋”๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ์ตœ์ข… ๋ฐฐํฌ์šฉ ํŒŒ์ผ๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค(๋‹ค ์ตœ์ ํ™”, ์••์ถ•๋œ  ์ƒํƒœ)

 

 

const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const CopyWebpackPlugin = require("copy-webpack-plugin");

const webpackMode = process.env.NODE_ENV || 'development';

module.exports = {
mode: webpackMode,
entry: {
main: './src/main.js', //์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ์„ ๋นŒ๋“œํ•  ๋•Œ, ์‹œ์ž‘์ ์ด ๋˜๋Š” ํŒŒ์ผ(์—”ํŠธ๋ฆฌ ๊ธฐ์ค€ ํŒŒ์ผ)
},
output: { //๋นŒ๋“œํ–ˆ์„ ๋•Œ dist ํŒŒ์ผ์ด ์ž๋™ ์ƒ์„ฑ๋˜๋ฉด์„œ ๊ทธ ์•ˆ์— ๋ฒˆ๋“ค๋ง๋œ ํŒŒ์ผ๋“ค์ด ์ƒ๊ฒจ๋‚จ
path: path.resolve('./dist'),
filename: '[name].min.js' //ํŒŒ์ผ ์ด๋ฆ„๊นŒ์ง€ ์ง€์ • ๊ฐ€๋Šฅ
},
// es5๋กœ ๋นŒ๋“œ ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์ฃผ์„ ์ œ๊ฑฐ
// ๋‹จ, ์ด๊ฑฐ ์„ค์ •ํ•˜๋ฉด webpack-dev-server 3๋ฒˆ๋Œ€ ๋ฒ„์ „์—์„œ live reloading ๋™์ž‘ ์•ˆํ•จ
// target: ['web', 'es5'],
devServer: {
liveReload: true //์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ ์„ค์ •
},
optimization: {
minimizer: webpackMode === 'production' ? [
new TerserPlugin({ //๋นŒ๋“œํ•  ๋•Œ ์ฝ”๋“œ ์••์ถ•๋˜๋„๋ก
terserOptions: {
compress: {
drop_console: true //์ฐ์–ด๋†“์€ ์ฝ˜์†”๋กœ๊ทธ ์ง€์šฐ๊ธฐ
}
}
})
] : [],
splitChunks: {
chunks: 'all'
}
},
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.js$/,
enforce: 'pre',
use: ['source-map-loader'],
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html',
minify: process.env.NODE_ENV === 'production' ? {
collapseWhitespace: true,
removeComments: true,
} : false
}),
new CleanWebpackPlugin(),
new CopyWebpackPlugin({
patterns: [
{ from: "./src/main.css", to: "./main.css" },
{ from: "./src/images", to: "./images" },
],
})
]
};

<์›นํŒฉ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋งํ•ด๋ณด๊ธฐ>

babel.config.js : ๋ฐ”๋ฒจ์€ ์ตœ์‹  ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฒ„์ „์„ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ์‹œ์ผœ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์˜ˆ์ „ ๋ธŒ๋ผ์šฐ์ €์—๋„ ์ž˜ ๋Œ์•„๊ฐ€๊ฒŒ๋” ํ•˜๊ธฐ ์œ„ํ•จ ( ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ)

ํŠนํžˆ ๋ฐ”๋ฒจ์€ ์›นํŒฉ๊ณผ์˜ ์กฐํ•ฉ์ด ์ข‹๊ธฐ์— ๋ณดํ†ต ์›นํŒฉ์„ ์“ฐ๋ฉด ์›นํŒฉ์— ๋ฐ”๋ฒจ์„ ๋กœ๋”๋กœ ๋ถˆ๋Ÿฌ์™€์„œ ๊ฐ™์ด ์‹คํ–‰ํ•ด์ค€๋‹ค.

module.exports = {
	presets: [
		['@babel/preset-env', {
			targets: {
				chrome: '58',
				ie: '11',
			},
			useBuiltIns: 'usage',
			corejs: {
				version: 3,
			}
		}]
	]
};

 

728x90

'Javascript > FE ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ค์ •' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[FE ๋ฒˆ๋“ค๋Ÿฌ] parceljs  (0) 2022.05.07
node.js ์ด์šฉํ•ด์„œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ  (0) 2022.03.26
    'Javascript/FE ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ค์ •' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [FE ๋ฒˆ๋“ค๋Ÿฌ] parceljs
    • node.js ์ด์šฉํ•ด์„œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ
    Rainbow๐ŸŒˆCoder
    Rainbow๐ŸŒˆCoder
    ๋ชฐ๋ผ๋„ ๊ฒฐ๊ตญ์€ ์•„๋Š” ๊ฐœ๋ฐœ์ž, ๊ทธ๋Ÿฐ ์‚ฌ๋žŒ์ด ๋˜๊ธฐ ์œ„ํ•œ ๋งค์ผ์˜ ํ•œ๊ฑธ์Œ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”