๐Ÿฅฌ๐Ÿ–ํ”„๋ก ํŠธ๋ฅผ Firebase์— ์‹ธ์„œ ๋“œ์…”๋ณด์„ธ์š” | 2 - ์ฝ”๋“œ ์ž‘์„ฑ๊ณผ webpack ์„ค์น˜

Dongjun Kimยท2022๋…„ 12์›” 4์ผ
2
post-thumbnail

1ํŽธ์„ ๋†“์ณค๋‹ค๋ฉด ๊ผญ ๋ณด๊ณ  ์˜ค์ž!

๊ธฐ๋ณธ ํŒŒ์ผ๋“ค ์ž‘์„ฑ

์›ํ•˜๋Š” ๊ณณ์— ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ๋งŒ๋“  ํ›„ dist/index.html, src/index.js๋ฅผ ํ•˜๋‚˜์”ฉ ๋งŒ๋“ค์–ด์ค€๋‹ค.

ํŒŒ์ผ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

.
โ”œโ”€โ”€ dist          
โ”‚   โ””โ”€โ”€ index.html       
โ”œโ”€โ”€ src
โ”‚   โ””โ”€โ”€ index.js          
โ””โ”€โ”€ README.md

index.js๋Š” ๋‚˜์ค‘์— ์ˆ˜์ •ํ•˜๊ณ , ์ผ๋‹จ index.html์— ๋“ค์–ด๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ด์ฃผ์ž.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Firebase-9-Demo</title>
    <script src="bundle.js" defer></script>
  </head>
  <body>
    <h1>Firebase๐Ÿ”ฅ<h1>
  </body>
</html>

<script>ํƒœ๊ทธ ์•ˆ์˜ bundle.js๋ผ๋Š” ํŒŒ์ผ์€ ๋‚˜์ค‘์— ์„ค์ •ํ•  webpack์ด ์ƒ์„ฑํ•ด์ค€๋‹ค.
ํŠน์ • ์ฃผ์†Œ๋กœ ๋“ค์–ด๊ฐ”์„ ๋•Œ, ์ด html ํŽ˜์ด์ง€๋ฅผ ๋ณด๋Š”๊ฒŒ ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋‹ค.


npm ์ดˆ๊ธฐํ™”

Node.js๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹จ ๊ฐ€์ • ํ•˜์— npm command๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

npm init

์‹คํ–‰ํ•˜๋ฉด, package.json๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

์•ž์œผ๋กœ npm run build๋กœ webpack์„ ์‹คํ–‰ํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ package.json์„ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

scripts๋ผ๊ณ  ๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„์— โ€œbuildโ€: โ€œwebpackโ€์„ ์ถ”๊ฐ€ํ•ด์ฃผ์ž.

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

Webpack ์„ค์น˜

npm i webpack webpack-cli -D

-D ์˜ต์…˜: Development Dependency์— ์ถ”๊ฐ€

์œ— ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด webpack์„ ์„ค์น˜ํ•œ๋‹ค. Firebase ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์•ˆ์—์„œ ์šฐ๋ฆฌ๊ฐ€ importํ•ด์„œ ์“ฐ๋Š” ๋ชจ๋“ˆ๋งŒ output file์— ๋ฒˆ๋“ค๋ง ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•  ๊ฑฐ๋‹ค.


Webpack.config.js

์„ค์น˜ ํ›„, ํ”„๋กœ์ ํŠธ์˜ root folder์— webpack.config.js๋ž€ ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.

์•ˆ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์–ด์ค€๋‹ค.

const path = require("path");

module.exports = {
  mode: "development",
  entry: "./src/index.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "bundle.js",
  },
  watch: true,
};

์ž์„ธํ•œ ์„ค๋ช…์€ ์ƒ๋žตํ•˜๊ฒ ์ง€๋งŒ, entry์˜ ํŒŒ์ผ์„ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ํŒŒ์ผ๋“ค์„ ouput์— ๋”ฐ๋ผ ์šฐ๋ฆฌ๊ฐ€ HTML์— ์ถ”๊ฐ€ํ–ˆ๋˜ bundle.js๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค๋Š” ๋œป์ด๋‹ค. npm, webpack ๋“ฑ์— ๋Œ€ํ•ด์„œ๋Š” ๋˜ ์ •๋ฆฌ๋ฅผ ํ•ด์„œ ์˜ฌ๋ฆด ์ƒ๊ฐ์ด๋‹ค.

์ฐธ๊ณ ๋กœ watch: true๋Š” webpack์ด ์ง€์ผœ๋ณด๊ณ  ์žˆ๋‹ค๊ฐ€ ํŒŒ์ผ์— ๋ณ€๊ฒฝ์ด ์ƒ๊ธฐ๋ฉด ๋‹ค์‹œ ๋ฒˆ๋“ค๋งํ•ด์ค€๋‹ค๋Š” ๋œป์ด๋‹ค.

๐Ÿ”ฅ๋‹ค์Œ์—๋Š” firebase๋ฅผ ์„ค์น˜ํ•˜๊ณ  deploy๊นŒ์ง€ ํ•ด๋ณด์ž!

profile
์ค‘์š”ํ•œ ๊ฒƒ์€ ๊บพ์ด์ง€ ์•Š๋Š” ๋งˆ์Œโ˜•๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€