React + Typescript without CRA

유섭·2022년 4월 10일
0

환경설정

// package.json 초기설정
npm init -y

// react, react-dom 설치
yarn add react react-dom

// devDependencies에 typescript, @types/react @types/react-dom 설치
yarn add -D typescript @types/react @types/react-dom

// tsconfig.json 설정
tsc -- init

// babel 관련 라이브러리 설치
yarn add -D @babel/core @babel/preset-env 
@babel/preset-react @babel/preset-typescript babel-loader
@babel/plugin-transform-runtime

// webpack 관련 라이브러리 설치
yarn add -D webpack webpack-cli webpack-dev-server html-webpack-plugin

package.json

{
	...
    "scripts": {
        "dev": "webpack server --mode development --open --hot",
        "build": "webpack --mode production",
        "prestart": "cross-env NODE_ENV=production npm run build",
        "start": "webpack --mode development"
    },
	...
    "dependencies": {
    	...
        "dotenv": "^16.0.0",
        "react": "^18.0.0",
        "react-dom": "^18.0.0"
        ...
    },
    "devDependencies": {
	    ...
        "@babel/core": "^7.17.9",
        "@babel/plugin-transform-runtime": "^7.17.0",
        "@babel/preset-env": "^7.16.11",
        "@babel/preset-react": "^7.16.7",
        "@babel/preset-typescript": "^7.16.7",
        "@babel/runtime-corejs3": "^7.17.9",
        "@types/react": "^18.0.1",
        "@types/react-dom": "^18.0.0",
        "babel-loader": "^8.2.4",
        "clean-webpack-plugin": "^4.0.0",
        "html-webpack-plugin": "^5.5.0",
        "typescript": "^4.6.3",
        "webpack": "^5.72.0",
        "webpack-cli": "^4.9.2",
        "webpack-dev-server": "^4.8.1",
        "cross-env": "^7.0.3"
        ...
    }
}

.babelrc

{
    "presets": [
        "@babel/preset-env",
        [
            "@babel/preset-react",
            {
                "runtime": "automatic"
            }
        ],
        "@babel/preset-typescript"
    ],
    "plugins": [
        [
            "@babel/plugin-transform-runtime",
            {
                "regenerator": true
            }
        ]
    ]
}

webpack.config.js

// webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: './index.tsx', // 번들링 시작 위치
    output: {
        path: path.join(__dirname, '/dist'), // 번들 결과물 위치
        filename: 'bundle.js',
    },
    module: {
        rules: [
            {
                test: /\.(ts|js)x?$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader',
                },
            },
        ],
    },
    resolve: {
        modules: [path.join(__dirname, 'src'), 'node_modules'], // 모듈 위치
        extensions: ['.tsx', '.ts', '.js', '.jsx'],
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: './public/index.html',
        }),
    ],
    devServer: {
        // live-server host 및 port
        host: 'localhost',
        port: 5500,
    },
    mode: 'development', // 번들링 모드 development / production
};

디렉토리 경로

0개의 댓글

관련 채용 정보