Jieunny์˜ ๋ธ”๋กœ๊ทธ

S4) Unit 3. [์‹ค์Šต] ๊ฐ„๋‹จํ•œ ์›น์•ฑ ๋ฒˆ๋“ค๋ง ํ›„ ๋ฐฐํฌํ•˜๊ธฐ ๋ณธ๋ฌธ

CodeStates/Training

S4) Unit 3. [์‹ค์Šต] ๊ฐ„๋‹จํ•œ ์›น์•ฑ ๋ฒˆ๋“ค๋ง ํ›„ ๋ฐฐํฌํ•˜๊ธฐ

Jieunny 2023. 3. 20. 11:45

๐Ÿ“ฃ  ๋‚˜๋งŒ์˜ ์•„๊ณ ๋ผ์Šคํ…Œ์ด์ธ  ๋ฒˆ๋“ค๋ง ํ•˜๊ธฐ

๐Ÿ“š ์ฐธ๊ณ  : https://velog.io/@seul_/%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%9B%B9%EC%95%B1-%EB%B2%88%EB%93%A4%EB%A7%81-%ED%9B%84-%EB%B0%B0%ED%8F%AC%EC%9B%B9%ED%8C%A9-%EA%B8%B0%EC%B4%88-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC

์„œ๋ฒ„๋Š” ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐํ•˜์ง€..

์–˜๋Š” ์„œ๋ฒ„ ์•ˆ์ผœ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋œจ๋Š”๋ฐ ์™œ React๋กœ ํ•œ๊ฑด ์•ˆ๋˜๋Š”๊ฑฐ์ง€..!!

๐Ÿญ. ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— npm ์„ค์น˜ํ•˜๊ธฐ

npm init -y

โžฐ package.json ํŒŒ์ผ ์ƒ์„ฑ

 

๐Ÿฎ. ์›นํŒฉ ์„ค์น˜ํ•˜๊ธฐ

npm install -D webpack webpack-cli

 

๐Ÿฏ. Webpack.config.js ํŒŒ์ผ ์ž‘์„ฑํ•˜๊ธฐ

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'app.bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
};

โžฐ ๊ฒฝ๋กœ๊ฐ€ src/index.js๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— srcํด๋” ์ƒ์„ฑํ•ด์„œ html, js, cssํŒŒ์ผ์„ ๋ชจ๋‘ src ํด๋” ๋ฐ‘์œผ๋กœ ์˜ฎ๊ฒจ์ค€๋‹ค.

 

๐Ÿฐ. jsํŒŒ์ผ ๋ฒˆ๋“ค๋งํ•˜๊ธฐ

npx webpack
"scripts": {
    "build": "webpack",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

โžฐ package.json์— ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•ด๋†“์œผ๋ฉด npm run build๋กœ ์‰ฝ๊ฒŒ ๋ฒˆ๋“ค๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

โžฐ ์„ฑ๊ณตํ•˜๋ฉด dist ํด๋”์— app.bundle.js๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

 

๐Ÿฑ. htmlํŒŒ์ผ ๋ฒˆ๋“ค๋งํ•˜๊ธฐ

1๏ธโƒฃ html-webpack-plugin ์„ค์น˜ํ•˜๊ธฐ

npm i -D html-webpack-plugin

 

2๏ธโƒฃ webpack.config.js ํŒŒ์ผ์— ํ•ด๋‹น ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ๋กํ•˜๊ธฐ

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'app.bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: path.resolve(__dirname, 'src', 'index.html'),
    }),
  ],
};

 

3๏ธโƒฃ npm run build๋กœ ๋ฒˆ๋“ค๋งํ•˜๊ธฐ

โžฐ ์„ฑ๊ณตํ•˜๋ฉด dist ํด๋”์— index.html์ด ์ƒ์„ฑ๋œ๋‹ค.

โžฐ css๋Š” ์ ์šฉ๋˜์ง€ ์•Š์•˜์ง€๋งŒ index.html ํŒŒ์ผ์€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.

 

๐Ÿฒ. cssํŒŒ์ผ ๋ฒˆ๋“ค๋งํ•˜๊ธฐ

1๏ธโƒฃ style-loader ์™€ css-loader ์„ค์น˜ํ•˜๊ธฐ

npm i -D style-loader css-loader

 

2๏ธโƒฃ index.js ํŒŒ์ผ์—์„œ CSS ํŒŒ์ผ ์ž„ํฌํŠธ ํ•˜๊ธฐ

import './style.css";

โžฐ index.jsํŒŒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ cssํŒŒ์ผ์„ ํ•จ๊ป˜ ๋ฌถ์–ด์ฃผ๋Š” ๊ฐœ๋…์ด๊ธฐ๋•Œ๋ฌธ์— cssํŒŒ์ผ๊ณผ์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋„ jsํŒŒ์ผ์— ๋ช…์‹œ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

3๏ธโƒฃ webpack.config.js์— ์„ค์น˜ํ•œ ๋กœ๋” ๋“ฑ๋ก

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'app.bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  module : {
    rules: {
        test: /\.css$/,
        use: ["style-loader", "css-loader"],
        exclude: /node_modules/,
    }
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: path.resolve(__dirname, 'src', 'index.html'),
    }),
  ],
};

โžฐ test ํ•ญ๋ชฉ์— ์ •์˜๋œ ์ •๊ทœ์‹์— ๋งค์นญ๋˜๋Š” ํŒŒ์ผ(.css ํŒŒ์ผ)์€ use ํ•ญ๋ชฉ์— ๋“ฑ๋ก๋œ ๋กœ๋”๋ฅผ ํ†ตํ•ด์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.

โžฐ ๋กœ๋”๋Š” css-loader๊ฐ€ ๋จผ์ € ์ ์šฉ๋˜๊ณ , styled-loader๊ฐ€ ์ ์šฉ๋œ๋‹ค.

 

4๏ธโƒฃ npm run build๋กœ ๋ฒˆ๋“ค๋งํ•˜๊ธฐ

โžฐ index.html ํŒŒ์ผ์„ ์—ด๋ฉด css๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

๐Ÿฒ. ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

โžฐ ์ด๋ฏธ์ง€๋Š” fileloader๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•œ๋‹ค.

 

1๏ธโƒฃ file loader ์„ค์น˜ํ•˜๊ธฐ

npm i file-loader -D

 

2๏ธโƒฃ webpack.config.js์— ์„ค์ • ์ถ”๊ฐ€ํ•ด์ฃผ๊ธฐ

{
       test: /\.jpeg$/,
       use: [
        {
          loader: 'file-loader',
          options: {
            name: '[name].[ext]'
            // ์ด๋ฆ„์ด ๋žœ๋คํ•œ ํ•ด์‹œ๊ฐ’์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์ด๋ฆ„์„ ๋”ฐ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.
           }
         },
       ],
},

 

3๏ธโƒฃ index.js์— ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ž„ํฌํŠธํ•˜๊ธฐ

import './images/cinnamon.jpeg';
import './images/๊ณ„ํ”ผ_.jpeg';
import './images/tab.jpeg';

 

โžฐ ์ด๋ฏธ์ง€๋„ ์ •ํ™•ํ•œ ์ด๋ฆ„์œผ๋กœ ๋ถˆ๋Ÿฌ์™€์ง„๋‹ค.


๐Ÿ“ฃ  ๋ฒˆ๋“ค๋ง ํ›„ Github์— ๋ฐฐํฌํ•˜๊ธฐ

1๏ธโƒฃ webpack.config.js ์—์„œ output์„ dist์—์„œ docs๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

2๏ธโƒฃ ์ด๋ฏธ ๋ฒˆ๋“ค๋ง๋œ distํŒŒ์ผ์ด๋ฆ„์„ docs๋กœ ๋ฐ”๊พผ๋‹ค.(๊นƒํ—™ ํŽ˜์ด์ง€ ๋ฐฐํฌ๊ฐ€ ๋ชฉํ‘œ๋ผ๋ฉด ์• ์ดˆ์— output์„ docs๋กœ ์„ค์ •ํ•˜๊ณ  ์ €์žฅํ•˜์ž)

3๏ธโƒฃ ๋นŒ๋“œ๋ฅผ ๋‹ค ๋งˆ์น˜๊ณ  git push๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

4๏ธโƒฃ ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ๊นƒํ—™ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ setting- pages์—์„œ source ์˜ต์…˜์„ ํ˜„์žฌ ๋ธŒ๋žœ์น˜, root๋ฅผ /docs ํด๋”๋กœ ์„ค์ •ํ•˜๊ณ  ์ €์žฅํ•œ๋‹ค.

 

๐Ÿ”— ๋ฐฐํฌ ๋งํฌ

https://jieuny0314.github.io/fe-sprint-my-agora-states/

 

My Agora States

 

jieuny0314.github.io