반응형

create-react-app으로 설정하기

프로젝트 생성

yarn create react-app react-example

yarn이 설치되어있지 않다면 아래 명령어로 설치

npm install -g yarn

직접 설정하기

package.json 파일 추가

{
    "name": "react-example",
    "version": "1.0.0",
    "description": "",
    "author": "",
    "license": "ISC",
    "scripts": {
        "dev": "webpack-dev-server --config webpack.dev.js",
        "build": "webpack --progress --hide-modules --config webpack.build.js"
    },
    "dependencies": {
        "react": "^16.8.6",
        "react-addons-update": "^15.6.2",
        "react-dom": "^16.8.6"
    },
    "devDependencies": {
        "babel-core": "^6.26.3",
        "babel-loader": "^7.1.2",
        "babel-preset-es2015": "^6.24.1",
        "babel-preset-react": "^6.24.1",
        "webpack": "^3.6.0",
        "webpack-dev-server": "^2.9.1"
    }
}

webpack.common.js 파일 추가

const glob = require('glob');

module.exports = {
    entry: getEntries(),

    output: {
        path: __dirname,
        filename: '[name]/bundle.js'
    },

    module: {
        rules: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: /node_modules/,
                query: {
                    cacheDirectory: true,
                    presets: ['es2015', 'react']
                }
            }
        ]
    }
};

function getEntries() {
    let indexPathList = glob.sync('./src/**/index.js');
    let entries = {};

    if (indexPathList.length === 0) {
        throw new Error("index.js 파일이 없습니다.");
    }

    for (let index in indexPathList) {
      let indexPath = indexPathList[index];
      let parentPath = indexPath.substring(0, indexPath.lastIndexOf("/"));

      parentPath = parentPath.replace("/src", "/resources");

      entries[parentPath] = indexPath;
    }

    return entries;
}

webpack.dev.js 파일 추가

const common = require('./webpack.common.js');
const webpack = require('webpack');

module.exports = Object.assign(common, {
    devServer: {
        hot: true,
        historyApiFallback: true,
        noInfo: true,
        overlay: true,
        port: 8080,
        //contentBase: __dirname + "/resources/" // index.js 파일 경로
    },

    plugins: [
        new webpack.HotModuleReplacementPlugin()
    ]
});

webpack.build.js 파일 추가

const webpack = require('webpack');
const common = require('./webpack.common.js');

module.exports = Object.assign(common, {
  plugins : [
    new webpack.optimize.OccurrenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin({
        comporess: {
            warnings: false
        }
    })
  ]
});

index.html 파일 추가

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>React</title>
    </head>
    <body>
        <div id="root"></div>
        <script src="/resources/example/bundle.js"></script>
    </body>
</html>

index.js 파일 추가

  • 경로 : <프로젝트>/src/example/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';

ReactDOM.render(
    <App/>, 
    document.getElementById('root')
);

App.js 파일 추가

  • 경로 : <프로젝트>/src/example/App.js
import React, { Component } from 'react';
import PropTypes from 'prop-types';

const propTypes = {

};
const defaultProps = {

};

class App extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <div>Hi</div>
        );
    }
};

App.propTypes = propTypes;
App.defaultProps = defaultProps;

export default App;

모듈 설치 & 실행

npm install
npm run dev

접속 및 확인

반응형

'Development > React' 카테고리의 다른 글

[React] Hooks  (0) 2019.05.15
[React] MobX  (0) 2019.05.14
[React] Redux  (0) 2019.05.14
[React] 기본 문법  (0) 2019.05.05
[React] Visual Studio Code 설정  (0) 2019.05.05

+ Recent posts