React/ReactBasic(ZeroCho)

Import와 require 비교

느리지만 꾸준하게 2021. 9. 9. 01:03

require은 node의 모듈 시스템이다. 

const React = require('react');
const ReactDom = require('react-dom');
const { hot } = require('react-hot-loader/root');

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

const Hot = hot(NumberBaseball);

ReactDom.render(<Hot />, document.querySelector('#root'));

즉 파일에서 module.exports에 numberbaseball class를 넣어주면 그거를 다른 파일에서 require해서 불러올 수가 있다.

class NumberBaseball { } 부분이 module.exports 부분에 담겨서 위에 numberbaseball로 require이 된다.

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

class NumberBaseball {

}

module.exports = NumberBaseball;

 

require을 import from으로 바꾸면 hot 부분은 구조분해 문법인데 

import React from 'react';
import ReactDOM from 'react-dom';
import { hot } from'react-hot-loader/root';

import NumberBaseball from './NumberBaseball';

const Hot = hot(NumberBaseball);

ReactDOM.render(<NumberBaseball />, document.querySelector('#root'));

 

아래를 보면 default를 한 애들은 import로 가져오고 안 한 애들은 구조분해로 가져온다.

default는 한 번만 쓸 수 있고 그냥 export는 많이 쓸 수 있다.( 둘 다 호환이 된다.)

import React, { Component } from 'react';


class NumberBaseball extends Component {

}

export const hello = 'hello'; // import { hello }
export const bye = 'hello'; // import { hello, bye }

export default NumberBaseball; // import NumberBaseball;

그리고 위 코드는 es2015 모듈 문법이고

 

아래 코드는 node의 문법이다.(common js) 즉 node에서는 require을 쓰고 react에서는 import와 export를 쓴다고 생각하자.

// const React = require('react');
// exports.hello = 'hello';
// module.exports = NumberBaseball

웹팩을 돌릴 때 노드로 웹팩을 돌리는데 노드에서는 node 문법만 지원을 한다. import 쓰면 에러가 날 것을 예상할 수 있는데 아니다. babel이 import도 require로 바꿔주기 때문이다.(webpack.config.js를 보면 babel 부분 확인할 수 있다.)

// webpack.config.js

module: {
        rules: [{
            test: /\.jsx?$/,
            loader: 'babel-loader',
            options: {
                presets: [
                    ['@babel/preset-env', {
                        targets: {
                            browsers: ['> 1% in KR'], // browserslist
                        },
                        debug: true,
                    }],
                    '@babel/preset-react',
                ],
                plugins: [
                    '@babel/plugin-proposal-class-properties',
                    'react-refresh/babel',
                ],
            },
        }],
    },

그래서 webpack.config.js 부분에서 const path 부분은 import로 하면 에러가 나게된다.(노드가 돌려주기 때문에)

const path = require('path'); // import path(x)
const RefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<출처 조현영: 웹 게임을 만들며 배우는 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)' 카테고리의 다른 글

리액트 반복문(key)  (0) 2021.09.09
끝말잇기 Hooks로 전환하기  (0) 2021.09.09
웹펙 데브서버와 핫 리로딩  (0) 2021.09.08
끝말잇기 Class 만들기  (0) 2021.09.08
@babel/preset-env와 plugins  (0) 2021.09.08