Errors - React setting


React webpack 설정 중 만났던 에러 정리
작성자의 원인을 정리한 것으로 같은 에러라도 원인은 다를 수 있다.

Cannot find module ‘react-refresh/babel’

개발서버 운영 중에 코드를 수정하면 코드 내용을 서버를 다시 안 켜도 반영해주는 HMR 을 사용하기 위해서 필요한 라이브러리는 react-refresh 이고 아래는 webpack.config.ts 에서 일부이다.

// webpack.config.ts
module: {
  rules: [
    {
      test: /\.tsx?$/,
      loader: "babel-loader",
      options: {
        presets: [
          // ...
        ],
        env: {
          development: {
            plugins: [require.resolve("react-refresh/babel")],
          },
          production: {
            // production 설정
          },
        },
      },
      exclude: path.join(__dirname, "node_modules"),
    },
    {
      test: /\.css?$/,
      use: ["style-loader", "css-loader"],
    },
  ],
},

위 코드에서 envdevelopment 설정에 react-refresh/babel 이 있다. 해당 모듈을 찾지 못해 에러가 난 것인데 원인은 허망했다.

react-fresh 라이브러리를 설치한 것.

react-refresh 라이브러리를 설치해야 되는데 오타였다… 😳

ReferenceError: RefreshRegRefreshReg is not defined code example

혹시 webpack.config.ts 에 아래의 2개의 플러그인이 지정되었는지 확인해보자.

// webpack.config.ts

if (isDevelopment && config.plugins) {
  config.plugins.push(new webpack.HotModuleReplacementPlugin());
  config.plugins.push(
    new ReactRefreshWebpackPlugin({
      overlay: {
        useURLPolyfill: true,
      },
    })
  );
}

TypeScript with ESLint: Parsing error: The keyword ‘enum’ is reserved eslint

이건 Typescript 를 사용항여서 발생한 ESLint 오류로 webpack 설정은 아니고 실제 동작에는 이상은 없지만 빨간줄은 보고 싶지 않기에 수정하였다.
eslint 설정에서 "parser": "@typescript-eslint/parser"를 추가해보자.

// .eslintrc
{
  "env": {
    "es6": true,
    "browser": true,
    "node": true
  },
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "parser": "babel-eslint",
    "sourceType": "module",
    "allowImportExportEverywhere": true,
    "ecmaFeatures": {
      "jsx": true,
      "modules": true
    }
  },
  "extends": ["plugin:prettier/recommended"]
}

Tags:

Categories:

Updated: