React/ReactBasic(ZeroCho)

웹펙 설치하기 (React practice)

느리지만 꾸준하게 2021. 9. 8. 18:33

(리액트 기본 설정 방법)

 

 

npm init을 하면 package.json파일이 생성된다.

npm init

React 개발에 필요한 모든 패키지들을 package.json파일에 넣어준다.

{
  "name": "lecture",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "jay",
  "license": "MIT"
}

터미널에서 리액트와 리액트 돔이 필요 설치해준다.

npm i react react-dom

리액트 개발할 때 필요한 웹펙을 설치 해준다.(- 주의, -D는 개발에서 밖에 안쓰인다는 의미이다.)

npm i -D webpack webpack-cli

작업하고 있는 폴더안에 webpack.config.js 파일을 생성해준다. 그리고 아래코드 넣어준다.

module.exports = {

};

 

client.jsx 파일 만들어주고 아래 코드 넣어준다.

const React = require('react');
const ReactDom = require('react-dom');

React.render(<GuGuDan />)

 

index.html파일을 아래와 같이 해준다. 

<html>

<head>
    <meta charset="UTF-8" />
    <title>끝말잇기</title>
</head>

<body>
    <div id="root"></div>
    <script src="./dist/app.js"></script>
</body>

</html>

 

client.jsx에 아래와 같이 코드추가

그런데 만약 class가 2만개 3만개 정도되면??.. 감당하지 못한다.

즉 따른 파일로 불리를 해준다.

const React = require('react');
const ReactDom = require('react-dom');

class WordRelay extends React.Component {
    state= {

    };

    render() {

    }
}


React.render(<WordRelay />, document.querySelector('#root'));

 

WordRelay.jsx라는 파일을 따로 만들어 주고 코드를 넣어준다.

// WordRelay.jsx 

const React = require('react');

class WordRelay extends React.Component {
    state= {

    };

    render() {

    }
}

 

 

{ Component }를 넣어주어서 class 안에 코드를 줄여줄 수 있다.

그리고 exports를 넣어준다. 즉 파일을 둘로 쪼갤 때는 const 부분과 module.exports 부분을 추가로 넣어줘야 한다.

const React = require('react');
const { component } = React;

class WordRelay extends Component {
    state = {

    };

    render() {

    }
}

module.exports = WordRelay;

 

 

module.exports 부분을 써줬으므로 client.jsx 파일에다가 모듈을 불러줄 수 있다. 매우 효율적이다.

// client.jsx

const React = require('react');
const ReactDom = require('react-dom');

const WordRelay = require('./WordRelay');


React.render(<WordRelay />, document.querySelector('#root'));

 

webpack.config.js에서 코드를 넣어준다. (entry부분 매우 중요)

노드에서 경로 조작하도록 path부분을 준다. (dirname은 현재폴더) 

const path = require('path');

module.exports = {
    name: 'wordrelay-setting',
    mode: 'development', // 실서비스: production
    devtool: 'eval',

    entry: {

    }, // 입력
    output: {
        path: path.join(__dirname, 'dist'),
    }, // 출력
};

아래와 같이 entry부분에 코드 추가.

const path = require('path');

module.exports = {
    name: 'wordrelay-setting',
    mode: 'development', // 실서비스: production
    devtool: 'eval',

    entry: {
        app: ['./client.jsx', 'WordRelay.jsx'],
    }, // 입력
    output: {
        path: path.join(__dirname, 'dist'),
        filename: 'app.js'
    }, // 출력
};

 

 

 

그런데 이미 client.jsx에서 WordRealy.jsx를 불러와 주므로 WordRelay.jsx는 적어줄 필요가 없다.

// client.jsx

const React = require('react');
const ReactDom = require('react-dom');

const WordRelay = require('./WordRelay');


React.render(<WordRelay />, document.querySelector('#root'));
// webpack.config.js

const path = require('path');

module.exports = {
    name: 'wordrelay-setting',
    mode: 'development', // 실서비스: production
    devtool: 'eval',

    entry: {
        app: ['./client.jsx'],
    }, // 입력
    output: {
        path: path.join(__dirname, 'dist'),
        filename: 'app.js'
    }, // 출력
};

 

확장자가 많아질 수 도 있으니 webpack.config.js에 resolve를 추가

const path = require('path');

module.exports = {
    name: 'wordrelay-setting',
    mode: 'development', // 실서비스: production
    devtool: 'eval',
    resolve: {
        extensions: ['.js', '.jsx']
    },

    entry: {
        app: ['./client'],
    }, // 입력
    output: {
        path: path.join(__dirname, 'dist'),
        filename: 'app.js'
    }, // 출력
};

 

 

 

 

 

 

 

 

 

 

 

 

<출처 조현영: 웹 게임을 만들며 배우는 React>

https://www.inflearn.com/course/web-game-react/dashboard

 

[무료] 웹 게임을 만들며 배우는 React - 인프런 | 강의

웹게임을 통해 리액트를 배워봅니다. Class, Hooks를 모두 익히며, Context API와 React Router, 웹팩, 바벨까지 추가로 배웁니다., 8개의 간단한 웹게임을 만들어보며 배우는 리액트 강좌입니다.React Hooks에

www.inflearn.com

 

'React > ReactBasic(ZeroCho)' 카테고리의 다른 글

끝말잇기 Class 만들기  (0) 2021.09.08
@babel/preset-env와 plugins  (0) 2021.09.08
예제코드 웹펙으로 빌드(구구단)  (0) 2021.09.08
웹펙으로 빌드하기  (0) 2021.09.08
React Component  (0) 2021.09.04