[React] webpack 과 babel로 프로젝트

2022. 3. 16. 18:57·React/실험실
반응형

0. 들어가며

처음 React를 공부할때, 보통 CRA(create react app)을 사용해서 프로젝트를 만들지만 Webpack과 Babel을

공부하는 겸 한번 빈 페이지에서 프로젝트를 만들어보겠다. 

 

 

1. 세팅 및 패키지 설치

npm init

npm init 명령어를 통해서 package.json을 만들어주자! 

 

npm i --s react react-dom

React 프로젝트를 만들 것이기 때문에 당연히 react와 react-dom을 설치한다. 

 

npm i -D --s webpack webpack-cli webpack-dev-server

- webpack : webpack을 사용해서 프로젝트를 만들기 때문에 당연히 설치한다. 

- webpack-cli : 커맨드 라인에서 webpack을 사용할 수 있게 해주는 패키지이다. 

- webpack-dev-server : CRA를 통해 개발할 때 수정하면 자동으로 최신화가 되는 hot-reload 설정에 필요하다.

 

npm i --s html-webpack-plugin

- html-webpack-plugin : webpack이 html 파일을 읽어서 로드할 수 있도록 도와준다. 

 

npm i -D @babel/core @babel/preset-env @babel/preset-react babel-loader html-loader css-loader style-loader file-loader

- @babel/core : 모든 브라우저에서 지원할 수 있도록 es6문법을 바꿔주는 역할을 한다. 

- @babel/preset-~ : babel의 플러그인들로 react, env 외에도 typescript 등 존재한다. 

- babel-loader : jsx를 js로 바꾸어서 jsx를 이해할 수 있도록 해준다. 

 

2. webpack 설정하기 

루트 폴더 내에서 webpack.config.js라는 파일을 생성해준다. 

이 파일은 webpack의 세팅을 해주는 파일이다. 

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

module.exports = {
  entry: "./src/index.js",
  output: {
    path: path.join(__dirname, "/dist"),
    filename: "main.js",
  },

  resolve: {
    extensions: [".js", ".jsx"],
  },

  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_module/,
        use: {
          loader: "babel-loader",
        },
      },
      {
        test: /\.html$/,
        use: ["html-loader"],
      },
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader"],
      },
      {
        test: /\.(svg|png|jpg|gif)$/,
        use: {
          loader: "file-loader",
          options: {
            name: "[name].[ext]",
            outputPath: "img",
          },
        },
      },
      {
        test: /\.(woff|woff2|eot|ttf|otf)$/,
        use: {
          loader: "file-loader",
          options: {
            name: "[name].[ext]",
            outputPath: "font",
          },
        },
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "./public/index.html",
      title: "Test Title",
      meta: {
        "X-UA-Compatible": {
          "http-equiv": "X-UA-Compatible",
          content: "IE=edge",
        },
      },
      favicon: `favicon.svg`,
    }),
  ],
};

단락 별로 설명을 하자면, 

entry 

어플리케이션이 시작되는 파일을 의미한다. 

여러 컴포넌트로 나뉘어진 js 파일을 하나의 index.js에 모아서 실행하는 시작점이라는 뜻이다. 

따로 설정하지 않아도 webpack의 기본 설정으로 src/index.js를 찾게되지만, 유지보수 및 협업을 위해서 선언해둔다. 

 

output

webpack에 의해서 변환된 코드들이 생성되는 곳이다. 

우리가 build를 할 경우 dist 폴더 안 main.js라는 파일을 작성해준다. entry와 마찬가지로 기본적으로 설정되어있다. 

 

resolve

프로젝트에서 번들링 될 파일의 확장자를 등록한다. 

module

rules에 loader를 통해서 js가 아닌 파일들을 읽을 수 있게 해준다. 

test는 파일의 종류를 설정하고, use는 파일에 어떤 loader를 사용할 것인지, options을 통해 추가 설정을 할 수 있다.

 

css 설정의 경우 use를 통해 복수의 loader가 들어있는데, use는 배열의 역순으로 실행되는 특징이 있다. 

즉, css-loader를 통해 css 파일을 읽고 style-loader를 통해 최종적으로 읽어준다. 

 

plugins

webpack 안에 다양한 플러그인을 적용할 수 있는 곳이다. 이부분은 추후 심화에서 좀더 찾아볼 예정이다. 

 

3. babel 설정하기 

바벨 설정을 적용하기 위해서 .babelrc라는 파일을 루트폴더에 만들어준다. 

{
  "presets": ["@babel/env", "@babel/react"]
}

 

4. 프로젝트 세팅하기 

루프 폴더에 public 폴더를 만들어주고, public 폴더 안에 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>React Project!</title>
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>

추후 작성한 프로젝트 내용이 <div id="root"></div> 안에 들어가게 된다. 

 

이제 루트 폴더에 마찬가지로 src 폴더를 만들어주고, index.js와 App.js를 만들어준다. 

import React from "react";
import ReactDOM from "react-dom";
import App from "./App";

ReactDOM.render(<App />, document.getElementById("root"));
import React from "react";

const App = () => {
  return (
    <div>
      <h1>Hello! Webpack World!</h1>
    </div>
  );
};

export default App;

프로젝트 형식이 CRA 방식으로 개발했을때와 똑같다고 느낄 것이다. 우리가 프로젝트를 만드는 방식을 cra로 한것이

아닌 webpack, babel을 이용했을 뿐이지 설정 외 내부는 당연하게 유사할 것이다.

 

 "scripts": {
    "start": "webpack-dev-server --mode development --open --hot",
    "build": "webpack --mode production"
  },

package.json에 start와 build 스크립트를 작성한다. 

open 옵션은 start 시 자동으로 브라우저를 열어주는 옵션이고, hot 옵션은 코드 수정 시 자동으로 최신화 하는 옵션

 

5. 깃허브에서 확인해보기

현재까지 작업한 내용을 깃허브를 통해서 프로젝트를 보고싶다면 아래 링크를 통하면 된다. 

https://github.com/SeoJaeWan/webpack

반응형
저작자표시 비영리 변경금지

'React > 실험실' 카테고리의 다른 글

[React] Babel  (2) 2022.04.04
[React] Webpack 환경에서 환경변수 사용  (1) 2022.03.29
[React] Code Splitting  (1) 2022.03.24
[React] html-webpack-plugin?  (1) 2022.03.23
[React] webpack 과 babel로 프로젝트에 폰트 파일 적용하기  (0) 2022.03.22
'React/실험실' 카테고리의 다른 글
  • [React] Webpack 환경에서 환경변수 사용
  • [React] Code Splitting
  • [React] html-webpack-plugin?
  • [React] webpack 과 babel로 프로젝트에 폰트 파일 적용하기
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    Docker
    Node.js
    알고리즘
    리얼학습일기
    CSS
    식물
    next.js
    네트워크
    네이버 부스트캠프
    바질
    바질 키우기
    타입스크립트
    Babel
    자바스크립트
    ReactNative
    javascript
    리얼클래스
    typescript
    영어회화
    webpack
    리액트
    ChatGPT
    덤프
    프로그래머스
    다이소
    CCNA
    react
    redux
    영어독학
    타일러영어
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[React] webpack 과 babel로 프로젝트
상단으로

티스토리툴바