본문 바로가기

React

webPack 으로 React 프로젝트 생성, webPack 설정

* 웹팩

- 실제 개발시에 중복도 없애주고, console.log 같은것도 없앨 수 있음.

- 수만개의 컴포넌트들을 합쳐서 한 파일로 만들어준다

- node를 알아야함(node = javascript 실행기)

 

* 프로젝트 생성

1. 폴더 생성 후, 터미널에서 생성한 폴더로 들어가기

2. init하기

npm init
  •  package name 정하고, author 에 이름 적고, license 에는 MIT 라고 적음. (MIT가 뭘까)     >>> 상업적으로 수정/배포 해도되지만 피해는 사용자가 감수하는 라이센스래

 

 

3. react-dom, cli 설치

npm i -D react react-dom
npm i -D webpack webpack-cli
  • 설치하면 package.json에 출력됨. 
  • -D 는 개발용이라는 뜻임.(실제 서비스할 때에는 웹팩이 필요 없다)

 

4. 바벨설치

npm i -D @babel/core @babel/preset-env @babel/preset-react babel-loader
  • @babel/core : 바벨의 기본적인것들
  • @babel/preset-env : 우리 브라우저에 맞게 알아서 최신문법을 엣날 문법으로 바꿔줌
  • @babel/preset-react : jsx 같은 것 들 지원
  • @babel-loader : 바벨과 웹팩을 연결해줌

 

5. 자동빌드

npm i -D react-refresh @pmmmwh/react-refresh-webpack-plugin 
npm i -D webpack-dev-server
  • @pmmmwh... : 자동리프레쉬 플러그인
  • webpack-dev-server : 개발용 서버를 주렴. 하는 명령어
  • package.json 의 "script" 영역을 "dev":"webpack serve --env development" 로 변경
"scripts": {
    "dev": "webpack serve --env development"
  },

 

6. webpack.config.js 추가

**설정 내용 작성해야함

 

7. client.jsx, index.html, 실행시킬 000.jsx 파일 추가

  • client.jsx
// npm에서 설치한 애들 불러오는 것!
const React = require('react');
// const ReactDom = require('react-dom');
const ReactDom = require('react-dom/client'); // new version 용

// 같은폴더내에서 쪼개놓은 아이 불러오는 것
const WordRelay = require('./WordRelay_hooks');

const rootNode = document.querySelector('#root');

// ReactDom.render(<WordRelay />, document.querySelector('#root'));
ReactDom.createRoot(rootNode).render(// new version 용
    <WordRelay/>
)

 

  • index.html
<html>
<head>
    <meta charset="UTF-8"/>
    <title> 끝말잇기☆★☆ </title>
</head>
<body>
    <div id="root"></div>
    <script src="./dist/app.js"></script>
</body>
</html>

 

  • wordRelay_hooks.jsx
// npm에서 설치한 애들 불러오는 것!
const React = require('react');
const { useState, useRef } = React;

const WordRelay = () => {
    const [word, setWord] = useState('구름');
    const [value, setValue] = useState('');
    const [result, setResult] = useState('');
    const inputRef = useRef(null);

    const onSubmitForm = (e) => {
        e.preventDefault();
        if(word[word.length - 1] === value[0]) {
            setResult('딩동댕');
            setWord(value);
            setValue('');
            
            inputRef.current.focus();
        }else{
            setResult('땡');
            setValue('');
            inputRef.current.focus();
        }
    }

    const onChangeInput = (e) => {
        setValue(e.currentTarget.value);
        // currentTarget : 이벤트 생성 위치
        // target :  이벤트 발생 위치
    };

    
    return (
        <>
            <div>{ word }</div>
            <form onSubmit= { onSubmitForm }>
                <label htmlFor="wordInput">글자를 입력하세요</label>
                <input id="wordInput" className="wordInput" ref= { inputRef } value= { value } onChange= { onChangeInput }/>
                {/* value 와 onChange 세트로 넣을거 아니면 defaultValue 를 사용해야한다. */}
                <button>입력!!!!!!!!!!!!!!</button>
            </form>
            <div>{ result }</div>
        </>
    )
    
}


module.exports = WordRelay;// 이 줄을 추가해야 client.jsx 에서 불러올 수 있다.