코드잇 스프린트가 끝나고 취업 준비가 시작됐다. 이전에 했던 것을 정리하고 내가 하지 못했던 것을 배우는 겸해서 사이드 프로젝트를 진행하려고 했다.
여러가지 생각을 하던 중 초기 설정 - 개발 - 배포까지 나 스스로의 힘으로 모두 해보면 좋겠다고 생각을 했다. 그래서 일단 초기 설정을 먼저 해보자! 해서 나만의 React 보일러 플레이트를 만들게 됐다.
npm init -y
npm install react react-dom
npm install --save-dev webpack webpack-cli
-D
옵션을 붙여서 설치한다.npm install -D babel-loader @babel/preset-env @babel/preset-react
// src/index.js
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
const rootElement = document.getElementById("root");
const root = ReactDOM.createRoot(rootElement);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
// src/App.js
export default function App() {
return (
<div>
<h1>Hello, React!</h1>
</div>
);
}
<!-- index.html -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My React App</title>
</head>
<body>
<div id="root"></div>
<script src="./dist/bundle.js"></script>
</body>
</html>
const path = require("path");
module.exports = {
mode: "development",
entry: "./src/index.js",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "dist"),
},
module: {
rules: [
{
test: [/\.js$/, /\.jsx$/],
loader: "babel-loader",
options: {
presets: ["@babel/preset-env", ["@babel/preset-react", { runtime: "automatic" }]],
},
},
],
},
};
npx webpack
웹팩을 실행 시키면 dist/bundle.js
가 생성된다.
이후 index.html을 라이브 서버로 실행시켜보면 잘 동작한다!
HtmlWebPackPlugin을 사용하면 template으로 사용할 html파일을 주입해서, output으로 설정된 폴더에 html파일을 추가해준다. 그리고 번들링된 자바스크립트 파일과 추가된 html을 연결시켜준다.
npm install -D html-loader html-webpack-plugin
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My React App</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
mode: "development",
entry: "./src/index.js",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "dist"),
},
module: {
rules: [
{
test: [/\.js$/, /\.jsx$/],
loader: "babel-loader",
options: {
presets: ["@babel/preset-env", ["@babel/preset-react", { runtime: "automatic" }]],
},
},
{
test: /\.html$/,
loader: "html-loader",
options: {
minimize: true,
},
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: "index.html",
}),
],
};
npx webpack
현재 컴포넌트가 렌더링 되는지 보려면 웹팩으로 번들링하고 만들어진 index.html파일을 라이브 서버로 돌려봐야한다. 이런 경우 개발할 때 매우 불편해지는데 webpack-dev-server
를 사용하면 entry의 수정이 발생할 때마다 자동으로 웹에 적용시켜준다.
webpack-dev-server
를 설치해준다npm install -D webpack-dev-server
webpack.config.js
파일에 넣어준다.const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
...
devServer: {
port: 9000, // 서버를 열 포트 번호이다.
open: true, // 서버를 열면 자동으로 브라우저창을 열고, 해당 웹 앱을 보여준다.
},
};
npx webpack-dev-server
개발 서버를 실행할 때 마다 매번 npx webpack-dev-server
를 실행하면 귀찮기 때문에 package.json
의 script를 설정해보자.
{
"name": "real_react_boilerplate",
...
"scripts": {
"dev": "webpack-dev-server"
},
...
}
}
npm run dev
새로운 브라우저 창이 열리면서 웹 앱이 렌더링되면 성공이다.
https://velog.io/@jjunyjjuny/React-TS-boilerplate-%EC%A0%9C%EC%9E%91%EA%B8%B0-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%84%B1
https://goo-gy.github.io/2021-12-31-webpack-react
https://joshua1988.github.io/webpack-guide/