환경세팅

[React] TypeScript 설정

obin01 2024. 3. 26. 18:12

1. 프로젝트 생성

yarn create react-app 프로젝트명 --template typescript

 

2. babel 설치

yarn add @babel/runtime-corejs3
yarn add -D @babel/core @babel/preset-env @babel/preset-react @babel/preset-typescript babel-loader
yarn add -D @babel/plugin-transform-runtime

 

3. webpack 설치

yarn add -D webpack webpack-cli webpack-dev-server html-webpack-plugin

 

4. babel.config.json 설정

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

 

5. webpack.common.js

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  mode: "development",
  entry: path.resolve(__dirname, "..", "./src/index.tsx"),
  module: {
    rules: [
      {
        test: /\.(ts|js)x?$/,
        exclude: /node_modules/,
        use: [
          {
            loader: "babel-loader",
          },
        ],
      },
      {
        test: /\.(ts|tsx)$/, // .tsx 또는 .ts 확장자를 가진 파일에 대해서
        exclude: /node_modules/, // node_modules 폴더에서는 제외
        use: [
          {
            loader: "babel-loader", // babel-loader를 사용하여 변환
          },
        ],
      },
      {
        test: /\.css$/, // loader를 적용할 파일(정규식으로 작성)
        use: ["style-loader", "css-loader"], // 사용할 loader
      },
    ],
  },
  output: {
    path: path.join(__dirname, "/dist"),
    filename: "bundle.js", // entry point가 1개인 경우
    // filename: '[name]_bundle.js', // entry point가 여러개인 경우
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: path.resolve(__dirname, "../public/index.html"),
    }),
  ],
  resolve: {
    extensions: [".ts", ".tsx", ".jsx", ".js", ".json"],
    alias: {
      "@": path.resolve(__dirname, "../src/"),
      "@view": path.resolve(__dirname, "../src/views"),
    },
  },
};