inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

웹 게임을 만들며 배우는 React

2-9. 웹팩 데브 서버와 핫 리로딩

npm run dev 할 때 에러발생

478

바옹

작성한 질문수 4

0

에러메세지:

[webpack-cli] Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema.

- configuration.module.rules[0] has an unknown property 'mode'. These properties are valid:

object { assert?, compiler?, dependency?, descriptionData?, enforce?, exclude?, generator?, include?, issuer?, issuerLayer?, layer?, loader?, mimetype?, oneOf?, options?, parser?, realResource?, resolve?, resource?, resourceFragment?, resourceQuery?, rules?, scheme?, sideEffects?, test?, type?, use? }

-> A rule description with conditions and effects for modules.

 

webpack.config.js 파일 코드

const path = require("path"); //path: 노드에서 경로 조작하는 것을 쉽게 해준다.
const RefreshWebpackPlugin = require("@pmmmwh/react-refresh-webpack-plugin");

module.exports = {
  name: "wordrelay",
  mode: "development", // 실서비스: production
  devtool: "eval", // 실서비스: hidden-source-map
  resolve: {
    extensions: [".js", ".jsx"], //이렇게 적으면 웹펙이 알아서 js나 jsx가 있는지 확인을 하고, react-react-to-dom-word-relay 이거 찾아서 app.js로 만들어준다.
  },

  // 입력
  entry: {
    app: ["./client"],
  },
  module: {
    rules: [
      {
        test: /\.jsx?$/, //정규표현식: JS랑 JSX 파일에 룰을 적용하겠다.
        loader: "babel-loader",
        mode: "development",
        options: {
          //babel-loader의 옵션
          presets: [
            [
              "@babel/preset-env",
              {
                targets: {
                  browsers: ["> 1% in KR"], // browserslist
                },
                debug: true,
              },
            ],
            "@babel/preset-react",
          ],
          plugins: [
            "@babel/plugin-proposal-class-properties",
            "react-refresh/babel",
          ],
        },
      },
    ],
  },
  plugins: [new RefreshWebpackPlugin()],

  //출력
  output: {

    path: path.join(__dirname, "dist"), //컴퓨터 마다 파일 경로가 다 다른데 현재폴더안에 자동으로 dist폴더를 만들어준다.
    filename: "app.js",
    publicPath: "/dist/",
  },
 
  
  devServer: {
    publicPath: '/dist/',
    hot: true,
    devMiddleware: { publicPath: "/dist" },
    static: { directory: path.resolve(__dirname) },
  },
  //터미널에 webpack쓰면 두 파일을 합쳐준다.
};

 

package.json 코드

{
  "name": "lecture",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack --mode development",
    "dev": "webpack serve --env development",
    "assets": "webpack --config webpack.config.js --mode development"
  },
  "author": "tk",
  "license": "MIT",
  "devDependencies": {
    "@babel/core": "^7.24.0",
    "@babel/preset-env": "^7.24.0",
    "@babel/node": "^7.23.9",
    "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
    "react-refresh": "^0.14.0",
    "webpack": "^5.90.3",
    "webpack-cli": "^7.23.9",
    "webpack-dev-server": "^5.0.3"
  },
  "dependencies": {
    "babel-loader": "^9.1.3",
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  }
}

 

호환문제인 것같은데 어떤 부분이 호환문제가 생기는건지 잘 모르겠습니다.

react

답변 2

1

제로초(조현영)

인프런 인턴이 답변을 잘 해줬네요. 에러메시지가 나오면 영어 읽어보시면 됩니다. rule 안에 mode를 넣을 수 없다고 되어 있습니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용과 유사한 상황을 해결한 내용이 여기 있습니다. webpack dev server option 이 invalid 하답니다. 해당 게시글에서도 webpack configuration object의 오류를 다루고 있으며, 특정 속성이 예상하는 형식과 일치하지 않아 발생하는 문제에 대해 설명하고 있습니다.

질문하신 내용에서 보이는 문제 중 하나는 webpack.config.js 파일 내 module.rules 배열 내의 객체에 mode 속성이 포함된 것입니다. Webpack의 기대하는 rule 객체의 설계와는 맞지 않습니다. rules는 모듈의 생성 방법을 정의해야 하며 여기엔 loader와 해당 loaderoptions, 처리할 파일의 test 정규식 등이 포함될 수 있습니다. 하지만 mode 속성은 module.rules에 포함되지 않고, 대신 최상위 구성 객체에 선언되어야 합니다. 실제로 이미 module.exports 내에서 mode: "development"로 적절하게 선언하셨습니다.

이 문제를 해결하기 위해선, module.rules 배열 내 객체에서 mode를 제거해야 합니다. 나머지 설정은 적절하게 구성된 것으로 보입니다.

위 사례 외에도 문제 해결에 도움이 될 수 있는 다른 유사 질문 사례들입니다:
- webpack-cli에러 질문! - webpack-cli 관련 오류 해결 방법에 대해 다루고 있으며, 여러 다른 설정 관련 문제를 진단하는 데 도움이 될 수 있습니다.
- npm run dev - webpack-cli 에러 - npm run dev 실행 시 발생하는 webpack-cli 오류와 그 해결 방안에 대해 다룹니다.

각 사례는 웹팩 설정과 관련된 유사한 오류를 해결하는 방법에 대한 구체적인 가이드를 제공하며, 이를 통해 설정 파일을 정확히 조정하는 방법에 대해 배울 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

npm run dev 실행 시 포트가 안뜨는 문제

0

202

2

timeouts.current를 useEffect 의 input값으로 넣었을때

0

85

2

렌더링 테스트 코드 (Hooks)

0

80

1

Cannot find package 'react-refesh' 이런 에러 뜨시는 분들 보세요.

0

149

1

해당 에러 뜨는 분들 보세요. "Uncaught TypeError: ReactDom.createRoot is not a function"

1

191

1

강사님 레포지토리에서 코드 복사 시 master 브랜치 말고 react18 브랜치꺼 복붙하세요ㅠㅠ

0

95

1

useMemo와 useCallback 사용 시기

0

205

2

onRightClickTd가 작동을 하지 않습니다.

0

226

1

action.type 불러오는 방식

0

222

2

onClickRedo 질문

0

172

1

const Try = require(./Try) 빨간줄

0

248

1

npx webpack 실행시

0

313

1

지뢰찾기 강좌에서 빈칸들 한번에 열기 파트에서 여쭤보고싶은부분이 있어서 글 올립니다.

0

234

1

강좌에서 다루지 않은 기능들은 어떻게 학습하면 좋을까요?

0

311

1

react devtool이 enable 않됩니다.

0

530

2

React 랜더링이 되지 않습니다.

0

409

2

비동기로 동작하는 setState에 대해서

0

331

1

memo, PureComponenet, shouldComponentUpdate 관련 질문

0

206

1

devMiddleware의 필요성

0

352

1

리액트에서 화살표 함수를 사용해야하는 이유

0

931

2

path.join관련질문

0

280

2

2-9. 웹팩 데브 서버와 핫 리로딩 설치과정 시 에러

0

371

1

next.js 에서 이와 비슷한 예제를 돌리고있는데 react랑 달라서 질문 드립니

1

488

4

useInterval.js 커스텀 훅에서, 왜 첫번째 useEffect를 계속 반복해야할까요?

0

462

2