본문 바로가기
Web/React

React: Webpack 설치, 환경설정 및 빌드

by Jun_N 2020. 7. 28.

# 웹팩 설치하기

웹팩을 왜쓸까?

-실제 개발환경에서 component를 여러개를 사용해야 한다.

-컴포넌트마다 script를 사용하면 너무 길어져서 유지보수가 불가능하다.

-여러개의 js 파일을 한번에 합쳐서 한개의 js파일로 만드는 기술이 웹팩이다.

-합치면서 바벨적용 + 쓸모없는 코드 제거가 가능하다.

*React에서 node가 필요한 이유

-자바 스크립트 실행기가 필요해서

-웹팩을 돌리기 위해서

사용하는 순서

npm init

npm i react react-dom

npm i -D webpack webpack-cli

npm i -D @babel/core @babel/preset-env @babel/preset-react babel-loader @babel/plugin-proposal-class-properties

"@babel/core": "^7.10.5", // 기본적인 babel, 최신문법 지원

"@babel/preset-env": "^7.10.4", // 환경에 맞게 바꿔줌

"@babel/preset-react": "^7.10.4", // react jsx 바꿔줌

"babel-loader": "^8.1.0", // babel이랑 webpack 연결해줌

-D는 개발에서만 사용되는것을 의미함. (webpack은 개발이 끝나면 필요없음)

 

client.js

//client.js
const React = require("react");
const ReactDom = require("react-dom");

//이걸 사용해서 script로 react,react-dom을 안불러와도 된다.

 

webpack.config.js

//webpack.config.js
module.exports = {};

 

index.html

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>끝말잇기</title>
  </head>
  <body>
    <div id="root"></div>
    <script src="./dist/app.js"></script>
  </body>
</html>

이거를 자동화 하는것이 create-react-app이다.

 

# 모듈, 웹팩 설정 

 

#webpack.config.js

//webpack.config.js
const path = require("path");

module.exports = {
  name: "word-relay-setting",
  mode: "development", // => 실서비스: production
  devtool: "eval", //빠르게 하겠다.
  resolve: {
    extensions: [".js", ".jsx"],
  },

  entry: {
    app: ["./client"],
  }, //입력
  output: {
    path: path.join(__dirname, "dist"), // path.join은 현재 폴더에서 경로 설정
    filename: "app.js",
  }, //출력
};

//여러개 파일을 합쳐서 app.js 한개만 쓰게 하려고 한것.
//clinet.jsx에서 WordRelay.jsx를 불러오기 때문에 따로 넣을 필요는 없다. (resolve가 있으면 확장자도 안넣어도 된다.)

 

#client.jsx

#client.jsx
const React = require("react");
const ReactDom = require("react-dom");

//필요한것만 불러올 수 있다.
const WordRelay = require("./WordRelay");

ReactDom.render(<WordRelay />, document.querySelector("#root"));

//이걸 사용해서 script로 react,react-dom을 안불러와도 된다.
// .jsx는 jsx문법을 쓰고 있다. react 전용 파일이다를 알려줄 수 있음.

 

 

# 웹팩 빌드

 

const path = require("path");

module.exports = {
  name: "word-relay-setting",
  mode: "development", // => 실서비스: production
  devtool: "eval", //빠르게 하겠다.
  resolve: {
    extensions: [".js", ".jsx"],
  },

  entry: {
    app: ["./client"],
  }, //입력

  module: {
    rules: [
      {
        test: /\.jsx?/, //js, jsx파일 룰 적용 (정규표현식)
        loader: "babel-loader", // 바벨을 적용하겠다.
        options: {
          presets: ["@babel/preset-env", "@babel/preset-react"],
          plugins: ["@babel/plugin-proposal-class-properties"],
        }, // option적용!
      },
    ],
  }, // entry에 있는 파일을 읽어서 모듈 적용후 output으로 넘김.
  output: {
    path: path.join(__dirname, "dist"), // path.join은 현재 폴더에서 경로 설정
    filename: "app.js",
  }, //출력
};

//여러개 파일을 합쳐서 app.js 한개만 쓰게 하려고 한것.
//clinet.jsx에서 WordRelay.jsx를 불러오기 때문에 따로 넣을 필요는 없다. (resolve가 있으면 확장자도 안넣어도 된다.)

 

*webpack은 명령어 등록이 필요하다. package.json 파일 바꾸기

//package.json

"scripts": {
    "dev": "webpack"
  },

 

npx webpack 혹은 npm run dev

로 빌드하면 dist폴더 안에 app.js가 생긴것을 확인할 수 있다.

 

 

 

 

참고 링크

youtube.com/watch?v=66_D4RYpFqY&list=PLcqDmjxt30RtqbStQqk-eYMK8N-1SYIFn&index=13